web-dev-qa-db-fra.com

ORA-01031: privilèges insuffisants lors du choix de la vue

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?

29
Igor Zelaya

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;
19
Steve K

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.

35
Igor Zelaya

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 

4
oracledba

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.

4
Roberto Monterrey

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;

1
akshay

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.

1
dacracot

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

0
Van Gogh