Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment écrire une politique dans Oracle SQL qui restreint l'accès aux non-propriétaires d'une table ?

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.