Question

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 qui me manque?

Était-ce utile?

La solution

En tant que propriétaire de la table, vous devez accorder à l'utilisateur pour lequel vous exécutez l'instruction SELECT l'accès sur les tables sous-jacentes à l'accès SELECT.

grant SELECT on TABLE_NAME to READ_USERNAME;

Autres conseils

Enfin, je l’ai fait fonctionner. 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 [TABLE_NAME] TO [READ_USERNAME] WITH GRANT OPTION;

Ainsi, [READ_USERNAME] peut également accorder le privilège de sélection sur la vue à un autre schéma

.

Q. Quand est l'option " avec option de subvention " nécessaire?

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;     attribuer le rôle dsdw_select_role à fdr;

Mais: fdr obtient     sélectionnez count (*) à partir de 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 (*) à partir de dsdw.view_name;          5 rangées

Laissez-moi faire un récapitulatif.

Lorsque vous créez une vue contenant un objet appartenant à différents propriétaires, ces autres propriétaires doivent octroyer l'option "avec option" " au propriétaire de la vue. Ainsi, le propriétaire de la vue peut accorder à d’autres utilisateurs ou schémas ....

Exemple: Utilisateur_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 attribuer l'option "grant select on mine_a à user_b avec l'option d'attribution"

.

Ensuite, user_b peut accorder à tout le monde la sélection sur cette vue.

Si vous accédez à 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.

Si vous accédez à 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;

Pour utiliser une vue, l'utilisateur doit disposer des privilèges appropriés, mais uniquement pour la vue elle-même, pas pour ses objets sous-jacents. Toutefois, si les privilèges d'accès aux 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éfinisseur 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top