Lorsque j'essaie d'exécuter une vue comprenant des tables de différents schémas, un privilège ORA-001031 insuffisant est émis. Ces tables disposent d'une autorisation d'exécution pour le schéma où la vue a été créée. Si j'exécute l'instruction SQL de la vue, cela fonctionne. Qu'est-ce que je rate?
En tant que propriétaire de la table, vous devez accorder à l’utilisateur sous lequel vous exécutez l’instruction SELECT un accès SELECT aux tables sous-jacentes.
grant SELECT on TABLE_NAME to READ_USERNAME;
Finalement je l'ai eu pour travailler. La réponse de Steve est juste mais pas pour tous les cas. Il échoue lorsque cette vue est en cours d'exécution à partir d'un troisième schéma. Pour que cela fonctionne, vous devez ajouter l'option de subvention:
GRANT SELECT ON [NOM DE TABLE] À [READ_USERNAME] AVEC GRANT OPTION;
De cette façon, [READ_USERNAME] peut également accorder des privilèges de sélection sur la vue à un autre schéma.
Q. Quand l'option "avec subvention" est-elle requise?
A. lorsque vous avez une vue exécutée à partir d'un troisième schéma.
Exemple: schéma DSDSW a une vue appelée nom_vue
a) that view selects from a table in another schema (FDR.balance)
b) a third shema X_WORK tries to select from that view
Subventions typiques: accordez select sur dsdw.view_name à dsdw_select_role; accorde dsdw_select_role à fdr;
Mais: fdr obtient sélectionnez count (*) parmi dsdw.view_name; ERREUR à la ligne 1: ORA-01031: privilèges insuffisants
émettre la subvention:
grant select on fdr.balance to dsdw with grant option;
maintenant fdr: sélectionnez count (*) parmi dsdw.view_name; 5 rangées
Laissez-moi faire une récapitulation.
Lorsque vous créez une vue contenant un objet de différents propriétaires, ces autres propriétaires doivent accorder "avec option" au propriétaire de la vue. Ainsi, le propriétaire de la vue peut accorder à d'autres utilisateurs ou schémas ....
Exemple: User_a est le propriétaire d'une table appelée mine_a User_b est le propriétaire d'une table appelée yours_b.
Disons que user_b veut créer une vue avec une jointure de mine_a et yours_b
Pour que la vue fonctionne correctement, user_a doit indiquer "grant select on mine_a à user_b avec option grant".
Ensuite, user_b peut accorder à tout le monde la sélection sur cette vue.
Si l'accès à la vue via une procédure stockée, l'autorisation d'exécution est insuffisante pour accéder à la vue. Vous devez accorder explicitement à select.
tapez simplement ceci
tout accorder au public;
Si l'accès à la vue via une procédure stockée, l'autorisation d'exécution est insuffisante pour accéder à la vue. Vous devez accorder explicitement à select.
Pour utiliser une vue, l'utilisateur doit disposer des privilèges appropriés, mais uniquement pour la vue elle-même, pas pour les objets sous-jacents. Toutefois, si les privilèges d'accès pour les objets sous-jacents de la vue sont supprimés, l'utilisateur n'y a plus accès. Ce problème se produit car le domaine de sécurité utilisé lorsqu'un utilisateur interroge la vue est celui du créateur de la vue. Si les privilèges sur les objets sous-jacents sont révoqués par le créateur de la vue, celle-ci devient invalide et personne ne peut utiliser la vue. Par conséquent, même si un utilisateur a été autorisé à accéder à la vue, il peut ne pas être en mesure d'utiliser la vue si les droits du définiteur ont été révoqués des objets sous-jacents de la vue.
Documentation Oracle http://docs.Oracle.com/cd/B28359_01/network.111/b28531/authorization.htm#DBSEG98017