絶対に何もする必要はありません。
テーブル(およびその中に保存されているデータ)はユーザー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に行を自動的に挿入できるようになります。