Nie musisz nic z tym robić.
Tabele (i przechowywane w nich dane) są własnością użytkownika A. Nikt nie może ich zobaczyć chyba, użytkownik A nadaje określone uprawnienia innym użytkownikom, takim jak użytkownik B.
Można to zrobić, przyznając uprawnienie select, tj.
grant select on my_table to user_B;
a użytkownik B pobierałby dane jako
select * from user_A.my_table;
Użytkownik B nie będzie mógł modyfikować danych (ponieważ nie przyznano mu możliwości wstawiania/aktualizowania/usuwania).
Ponadto Ty (jako użytkownik A) możesz utworzyć widok który wybiera tylko część danych, np.
create view v_my_table as
select *
from my_table
where score > 4;
grant select on v_my_table to user_B;
W ten sposób użytkownik B zobaczy tylko wiersze, których wynik jest większy niż 4.
Jeśli istnieje użytkownik C, nie widzi absolutnie niczego. Jeśli chcesz, aby wyświetlał jakieś dane, zrobiłbyś to, co już zrobiłeś z użytkownikiem B - przyznaj pewne uprawnienia.
Istnieje jednak opcja, aby umożliwić użytkownikowi B „przekazywanie” uprawnień innym użytkownikom — użyjesz opcji with grant option
, np.
grant select on my_table to user_B with grant option;
Umożliwiłoby to użytkownikowi B przyznanie wyboru innym użytkownikom, np.
grant select on user_A.my_table to user_C;
Na koniec (mówiąc o tej odpowiedzi), jeśli jest wielu użytkowników, którym chciałbyś przyznać takie uprawnienia, możesz utworzyć role . Następnie przyznałbyś uprawnienia do roli i przyznał rolę innym użytkownikom. Pozwala na modyfikację ról w zależności od Twoich (i innych użytkowników) życzeń.
create role my_role;
grant select on my_table to my_role;
Na przykład na początek możesz przyznać select
do my_role
, a następnie przyznaj my_role
dla użytkowników B, C i D.
grant my_role to user_B;
grant my_role to user_C;
Później możesz przyznać insert
do my_role
grant insert on my_table to my_role;
i wszyscy użytkownicy, którym przyznano my_role
automatycznie będzie w stanie wstawić wiersze do my_table użytkownika A.