Du behöver inte göra absolut något åt det.
Tabeller (och data som lagras inom) ägs av användare A. Ingen kan se det om inte användare A ger vissa privilegier till andra användare, såsom användare B.
Det kan göras genom att ge select-privilegium, dvs.
grant select on my_table to user_B;
och användare B skulle sedan hämta data som
select * from user_A.my_table;
Användare B kommer inte att kunna ändra data (eftersom den inte beviljades infoga/uppdatera/radera).
Dessutom kan du (som användare A) skapa en vy som bara väljer en del av data, t.ex.
create view v_my_table as
select *
from my_table
where score > 4;
grant select on v_my_table to user_B;
Om du gör det skulle användare B bara se rader vars poäng är större än 4.
Om det finns användare C kan den inte se absolut någonting. Om du vill att den ska se vissa data, skulle du göra som du redan gjorde med användare B - bevilja vissa privilegier.
Det finns dock ett alternativ att låta användare B "vidarebefordra" privilegier till andra användare - du skulle använda with grant option
, t.ex.
grant select on my_table to user_B with grant option;
Det skulle tillåta användare B att bevilja val till andra användare, t.ex.
grant select on user_A.my_table to user_C;
Slutligen (om det här svaret), om det finns många användare som du skulle vilja ge sådana privilegier till, kan du skapa roller . Sedan skulle du ge privilegier till en roll och ge roll till en annan användare. Det låter dig ändra roller beroende på dina (och andra användares) önskemål.
create role my_role;
grant select on my_table to my_role;
Till exempel, för att börja, kan du ge select
till my_role
, och bevilja sedan my_role
till användare B, C och D.
grant my_role to user_B;
grant my_role to user_C;
Senare kan du bevilja insert
till my_role
grant insert on my_table to my_role;
och alla användare som beviljats my_role
skulle automatiskt kunna infoga rader i användare A:s my_table.