-
GRANT SELECT on table
Bonjour,
-Je dois créer un utilisateur et une vue sur une table d'un autre utilisateur ( c'est OK)
-Seulement je voudrais que ce nouvel utilisateur ne puisse avoir accès (SELECT) qu'à certaines colonnes de la table de l'autre utilisateur.
Concrètement je voudrais que l'utilisateur ne puisse pas voir plus de colonnes
que celles données via la vue.
Voici une requête que j'ai essayé mais qui ne fonctionne pas :
Code:
grant select ("ID1","ID2","NOM","PRENOM","DATNAIS") ON "USER1"."TABLE1" TO "USER2";
Auriez-vous une idée?
Merci
-
Bonjour,
Le plus simple est de créer dans le schéma USER1 la vue qui ne sélectionne que les colonnes désirées, et de donner le droit SELECT sur cette vue et non sur la table.
Une autre solution est de passer par les VPD (en savoir plus ici) pour masquer les colonnes indésirables (et on donne les droits d'accès à la table en entier), mais cela se base sur le Fine-Grained Auditing, qui est une option payante de l'édition Enterprise (vérifiez donc que votre licence vous le permet). Et puis c'est plus compliqué
-
Nous n'avons pas de licence EE.
la table appartient à USER1 et la vue a USER2 si je retire le privilege select sur la table USER2 ne peut plus accéder à sa vue. :-s
-
Je crois qu'une solution plus simple ne serait pas de créer un synonyme d'une table?
-
Comme je l'ai écrit dans mon premier message, la vue doit appartenir à USER1, celui qui possède la table. USER2 reçoit un grant select sur la vue d'USER1, et aucun droit sur la table. USER2 ne peut donc interroger directement la table, mais s'il interroge la vue possédée par USER1, la requête contenue dans la vue est exécutée avec les privilèges d'USER1, et donc ça marche. Et c'est ça l'intérêt (ou plutôt l'un des intérêts) d'utiliser les vues
Si vous créez la vue dans le schéma d'USER2, celui-ci doit disposer du privilège d'accéder à la table interrogée, et donc c'est normal que cela ne vous aide pas dans la résolution de votre problème.