顧客には150以上のフィールドのテーブルが必要ですが、顧客はスキャン会社のスタッフに見えるフィールドの一部だけを必要としています。この要件はビューで簡単に実現できます。顧客も要求しますが、これらのフィールドはスキャン会社は個別のフィールドしか変更できません。私はこれまでカラムレベルでこのような権限管理の必要性に遭遇したことがありません。実験をしてみましたが、とても興味深いと感じました。記録してください
顧客は一つ持っています需要150以上のフィールドがあるテーブルでは、顧客は会社をスキャンする人に一部のフィールドだけを見せてほしいと求めました。需要ビューで簡単に実装でき、顧客からこれらのフィールド、スキャン会社は個々のフィールドしか変更できないと要求されています。私はこれまでカラムレベルでの権限管理の必要性に遭遇したことがなく、実験をしてみましたが、とても興味深いと感じました。記録してみてください試験プロセス。 1. テストテーブルを作成し、ポイントテストデータを挿入: SQL> table test(id number,table_name varchar2(50) を作成する 所有者はヴァルハル2(50),TABLESPACE_NAMEヴァルハル2(50)); テーブル作成。 SQL> insert in test select、rownum,table_name,owner, TABLESPACE_NAME dba_tables; 5490行が作成されました。 SQL>コミット; コミット完了。 2. テストユーザーを作成し、基本的な権限を与える: SQL> CONN / AS SYSDBA 繋がっている。 SQL>ストリームのデフォルトテーブルスペースユーザーで識別されるユーザーストリームを作成すること; ユーザーが作成しました。 SQL>grant connect,resource to stream; グラントは成功しました。 3. テストユーザーにカラムレベルの権限を付与する: SQL> conn auth/auth 繋がっている。 SQL>テストからストリームへの更新(id)を付与します。 グラントは成功しました。 SQL>テストからストリームへの挿入(table_name)を付与します。 グラントは成功しました。 SQL> SQL> grant selectをテストからストリームへ; グラントは成功しました。 4. カラムレベルの権限設定情報をクエリ: SQL>GRANTEE、OWNER、TABLE_NAME、COLUMN_NAME、GRANTOR、PRIVILEGEを選択してください。 user_col_privsからの授与可能; 譲受人所有者 GRAの付与者特権TABLE_NAME COLUMN_NAME ------- ----- ---------- ----------- ------- --------- --- ストリーム認証テストTABLE_NAME認証挿入番号 AUT AUTH TEST ID AUTH INSERT NO AUT AUTH TEST ID AUTH UPDATE NO ストリーム認証テスト ID 認証更新番号 5. ログインテストユーザーがSELECT権限を確認する: SQL> conn stream/stream 繋がっている。 SQL> * を選択(auth.test orderから * を1分ずつ選択)。ここでrownum< =10; 所有者のテーブルスペースTABLE_NAME ---------- -------------------- ---------- ---------- 1 ICOL$ SYS システム 2 IND$ システム 3 COL$ システム 4 CLU$ SYS システム 5 TAB$ システム 6 LOB$ システム 7 COLTYPE$ システム 8 SUBCOLTYPE$ SYS SYSTEM 9 NTAB$ システム 10 REFCON$ システム 10行選択。 6. カラムレベルのUPDATE権限制御の検証: SQL> update auth.test set owner='STREAM' (id =1) 更新:auth.test set owner='STREAM' ここで id =1 * 1行目のエラー: ORA-01031: insufficient privileges テストテーブルのOWNERフィールドの値は変更が許可されていないことがわかります。報告ORA-01031:権限不足。上記はテストユーザーにテストテーブルのIDフィールドを変更する権限を与えているため、IDフィールドを変更することは可能です。 SQL> update auth.test set id=10 (id=1; 1行更新。 SQL>ロールバック; ロールバック完了。 7. カラムレベルのINSERT権限制御の検証: SQL>auth.test値(1,'stream','stream','users')に挿入します。 auth.testに値(1,'stream','stream','users')を挿入します。 * 1行目のエラー: ORA-01031: insufficient privileges 上記によりテストユーザーはテストテーブルのTABLE_NAMEフィールドを修正する権限が与えられているため、他のフィールドにNOT SOME(あるものの)制約がない場合に限りTABLE_NAMEフィールドを挿入することが可能です。 SQL>auth.test(table_name)に値(「stream」)を挿入します。 1行作成済み。 SQL>ロールバック; ロールバック完了。
|