Vous n'avez absolument rien à faire à ce sujet.
Les tables (et les données qui y sont stockées) appartiennent à l'utilisateur A. Personne ne peut les voir à moins que l'utilisateur A accorde certains privilèges à d'autres utilisateurs, tels que l'utilisateur B.
Cela peut être fait en accordant le privilège select, c'est-à-dire
grant select on my_table to user_B;
et l'utilisateur B récupèrerait alors les données sous
select * from user_A.my_table;
L'utilisateur B ne pourra pas modifier les données (car il n'a pas été autorisé à insérer/mettre à jour/supprimer).
De plus, vous (en tant qu'utilisateur A) pouvez créer une vue qui ne sélectionne qu'une partie des données, par exemple
create view v_my_table as
select *
from my_table
where score > 4;
grant select on v_my_table to user_B;
Ainsi, l'utilisateur B ne verrait que les lignes dont le score est supérieur à 4.
S'il y a un utilisateur C, il ne peut absolument rien voir. Si vous voulez qu'il voie certaines données, vous feriez ce que vous avez déjà fait avec l'utilisateur B - accordez certains privilèges.
Cependant, il existe une option permettant à l'utilisateur B de "transférer" les privilèges à d'autres utilisateurs - vous utiliseriez with grant option
, par exemple
grant select on my_table to user_B with grant option;
Cela permettrait à l'utilisateur B d'accorder la sélection à d'autres utilisateurs, par exemple
grant select on user_A.my_table to user_C;
Enfin (en parlant de cette réponse), s'il y a beaucoup d'utilisateurs auxquels vous voudriez accorder de tels privilèges, vous pouvez créer des rôles . Ensuite, vous accordez des privilèges à un rôle et accordez un rôle à un ou plusieurs autres utilisateurs. Il vous permet de modifier les rôles en fonction de vos souhaits (et ceux des autres utilisateurs).
create role my_role;
grant select on my_table to my_role;
Par exemple, pour commencer, vous pouvez accorder select
à my_role
, puis accordez my_role
aux utilisateurs B, C et D.
grant my_role to user_B;
grant my_role to user_C;
Plus tard, vous pouvez accorder insert
à my_role
grant insert on my_table to my_role;
et tous les utilisateurs ont accordé my_role
serait automatiquement en mesure d'insérer des lignes dans my_table de l'utilisateur A.