Non devi fare assolutamente nulla al riguardo.
Le tabelle (e i dati memorizzati all'interno) sono di proprietà dell'utente A. Nessuno può vederle a meno che l'utente A concede determinati privilegi ad altri utenti, come l'utente B.
Ciò può essere fatto concedendo il privilegio di selezione, ad es.
grant select on my_table to user_B;
e l'utente B recupererebbe i dati come
select * from user_A.my_table;
L'utente B non potrà modificare i dati (poiché non gli è stato concesso di inserire/aggiornare/eliminare).
Inoltre, tu (come utente A) puoi creare una vista che seleziona solo una parte dei dati, ad es.
create view v_my_table as
select *
from my_table
where score > 4;
grant select on v_my_table to user_B;
In questo modo, l'utente B vedrà solo le righe il cui punteggio è maggiore di 4.
Se c'è l'utente C, non può vedere assolutamente nulla. Se desideri che visualizzi alcuni dati, faresti quello che hai già fatto con l'utente B:concedere determinati privilegi.
Tuttavia, c'è un'opzione per consentire all'utente B di "inoltrare" i privilegi ad altri utenti:useresti with grant option
, ad es.
grant select on my_table to user_B with grant option;
Ciò consentirebbe all'utente B di concedere la selezione ad altri utenti, ad esempio
grant select on user_A.my_table to user_C;
Infine (parlando di questa risposta), se ci sono molti utenti a cui vorresti concedere tali privilegi, puoi creare ruoli . Quindi concederesti i privilegi a un ruolo e concederesti il ruolo a un altro utente. Ti consente di modificare i ruoli a seconda dei tuoi desideri (e degli altri utenti).
create role my_role;
grant select on my_table to my_role;
Ad esempio, per iniziare, potresti concedere select
a my_role
, quindi concedi my_role
agli utenti B, C e D.
grant my_role to user_B;
grant my_role to user_C;
Successivamente, puoi concedere insert
a my_role
grant insert on my_table to my_role;
e tutti gli utenti hanno concesso my_role
sarebbe automaticamente in grado di inserire righe nella my_table dell'utente A.