sql >> データベース >  >> RDS >> Oracle

テーブルの非所有者へのアクセスを制限するポリシーをOracleSQLで作成するにはどうすればよいですか?

    絶対に何もする必要はありません。

    テーブル(およびその中に保存されているデータ)はユーザーAが所有しています。 でない限り、誰もテーブルを見ることができません。 ユーザーAは、ユーザーBなどの他のユーザーに特定の特権を付与します。

    これは、選択権限を付与することで実行できます。つまり、

    grant select on my_table to user_B;
    

    そして、ユーザーBは次のようにデータをフェッチします

    select * from user_A.my_table;
    

    ユーザーBはデータを変更できません(挿入/更新/削除が許可されていないため)。

    さらに、(ユーザーAとして)ビューを作成できます データの一部のみを選択します。例:

    create view v_my_table as 
      select * 
      from my_table
      where score > 4;
    
    grant select on v_my_table to user_B;
    

    そうすると、ユーザーBにはスコアが4より大きい行のみが表示されます。

    ユーザーCがいる場合、それは絶対に何も見ることができません。一部のデータを表示したい場合は、ユーザーBで既に行ったことを実行します。特定の特権を付与します。

    ただし、ユーザーBに特権を他のユーザーに「転送」させるオプションがあります。with grant optionを使用します。 、例:

    grant select on my_table to user_B with grant option;
    

    これにより、ユーザーBは他のユーザーに選択を許可できます。例:

    grant select on user_A.my_table to user_C;
    

    最後に(この回答について話します)、そのような特権を付与したいユーザーが多数いる場合は、ロールを作成できます。 。次に、ロールに特権を付与し、別のユーザーにロールを付与します。それはあなたがあなたの(そして他のユーザーの)希望に応じて役割を変更することを可能にします。

    create role my_role;
    grant select on my_table to my_role;
    

    たとえば、最初に、selectを付与できます。 my_roleへ 、次にmy_roleを付与します ユーザーB、C、Dに。

    grant my_role to user_B;
    grant my_role to user_C;
    

    後で、insertを付与できます my_role

    grant insert on my_table to my_role;
    

    そして、すべてのユーザーにmy_roleが付与されました ユーザーAのmy_tableに行を自動的に挿入できるようになります。




    1. 不明なMySQLサーバーホスト

    2. C# によるストアド プロシージャの作成

    3. MySQLデータベースをバックアップする方法を学ぶ

    4. Table-Valued-Function内のCTEのmaxrecursionオプションを設定する方法