Quelqu'un peut-il expliquer les mêmes fonctions comportement différent sous différents utilisateur oracle?

StackOverflow https://stackoverflow.com/questions/7318704

  •  27-10-2019
  •  | 
  •  

Question

I ont un paquet appelé A et A a la fonction doSomething ();

utilisateur x est le propriétaire de A. y de l'utilisateur dispose d'un synonyme testSyn qui pointe vers x.Procédé;

Connecté en tant que x et la fonction exécutée doSomething () retourne vrai, mais quand connecté en tant que y de l'utilisateur et la fonction exécutée comme testSyn.doSomething (), il retourne faux pour la même valeur.

Quelqu'un pourrait-il expliquer pourquoi s'il vous plaît ce qui se passe?

Était-ce utile?

La solution

Jetez un oeil à la définition de la procédure. Si elle est quelque chose comme PROCEDURE a AUTHID CURRENT_USER il exécutera avec le les autorisations de l'utilisateur actuel et la résolution de noms . Si les utilisations de procédure vues qui prennent les privilèges d'utilisateur en compte (comme user_objects), qui pourraient expliquer le résultat différent.


Commentaire Réponse: Vous faites la distinction erronée. Imaginez que vous écrivez une procédure qui renvoie le object_name de la première rangée de user_objects. Cette procédure est la propriété de schema_owner et schema_invoker a la permission de l'exécuter. Si la procédure est définie sans AUTHID CURRENT_USER, il retournera un nom d'objet pour un objet dans le schéma schema_owner. La même procédure avec AUTHID CURRENT_USER retourne un nom d'objet du schéma schema_invoker à la place. Cela n'a rien à voir avec les privilèges d'exécution.

Je ne sais pas que c'est la source de votre problème, mais il est un bon candidat et il est facile de vérifier (il suffit de regarder la définition de procédure décrite dans la spécification du package).

Autres conseils

Vous êtes en mesure d'exécuter cette fonction, mais vous ne pouvez pas avoir des droits d'accès à tous les objets les références de fonction. Pour commencer, je vais essayer de savoir quel DB objets que votre accès de fonction et essayez d'accéder celles d'un outil comme sqlplus pour vérifier

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