2017-08-16 19 views
2

Bonjour,PL/SQL: Accéder à la vue d'un utilisateur différent dans la procédure stockée

J'ai 2 utilisateurs dans une base de données ORACLE, USER1 et USER2.

USER2 a une vue View1, et je veux une procédure USER1 pour accéder View1 via un curseur, comme ceci:

create or replace procedure PROCEDURE1 is 
     CURSOR C_CURSOR 
     IS 

     select * from USER2.VIEW1; 

     BEGIN 
     RETURN; 
    end PROCEDURE1; 

Cependant, lorsque je tente de compiler le PROCÉDURE1, je reçois l'erreur:

ORA-01031 - privelieges insuffisantes

Cependant, je reçois que cette erreur dans la procédure stockée, comme je peux faire la requête suivante très bien de USER1:

select * from USER2.VIEW1; 

Pouvez-vous s'il vous plaît me dire ce que je fais mal?

Merci beaucoup!

+2

USER1 doit avoir obtenu l'accès indirectement, par l'intermédiaire d'un rôle. Pour créer la procédure, il faut le privilège explicite 'accorder select sur user2.view1 à user1;' –

+0

Merci beaucoup! J'avais essayé cela avant, mais je ne pourrais pas parce que USER2.VIEW1 sélectionnait d'une table d'un 3ème UTILISATEUR, USER3. Je l'ai finalement obtenu en accordant select sur la table de USER3 à USER2 avec l'option de concession. – miduarte

Répondre

0

Voir le commentaire de Tony Andrews sur la question.

USER1 must have been granted access indirectly, via a role. To create the procedure it needs the explicit privilege grant select on user2.view1 to user1; – Tony Andrews Aug 16 '17 at 16:01

(non, je ne suis pas la pêche à la réputation, je veux juste ce laisser tomber hors de la file d'attente sans réponse)