2010-06-30 7 views
0

J'ai une procédure stockée FOO appartenant à l'utilisateur A. L'utilisateur B a l'autorisation EXECUTE sur FOO. L'une des procédures de FOO utilise une liaison DB pour récupérer des données à partir de [email protected]. A a un lien DB à REMOTEDB se connectant en tant qu'utilisateur AREMOTE tandis que B a un DBLink avec le même nom se connectant à REMOTEDB mais en tant qu'utilisateur BREMOTE.Procédure stockée Oracle Question de liaison DB

Lorsque B exécute FOO, il va utiliser A 'DB Link (connexion comme AREMOTE) ou B' DB Link (Connexion comme BREMOTE)?

Je demande parce que je supposais qu'une procédure appartenant à un utilisateur particulier aurait seulement accès aux dblinks de cet utilisateur même si un autre utilisateur avait EXECUTE sur cette procédure. Mais en quelque sorte cette procédure fonctionne correctement même si l'utilisateur AREMOTE n'a pas SELECT sur [email protected], donc je suis confus.

Répondre

2

La procédure doit utiliser le dblink défini pour le lien de A. Toute procédure Oracle utilise les droits du propriétaire pour traiter, sauf si cette procédure a été définie avec "Droits du demandeur". Invoker's Rights

Les droits d'invocateur définis pour une procédure indiquent au code d'utiliser les droits et objets locaux pour l'utilisateur appelant, et non le propriétaire du code. La raison pour laquelle cela n'est pas fait par défaut est généralement qu'un utilisateur final n'aura aucun droit sur les objets durs pour la mise à jour directe, mais un accès approprié via une API, qui appliquerait la bonne logique métier aux mises à jour, insertions et suppressions. alors ces objets seraient exposés comme accessibles à l'utilisateur final.

Questions connexes