Question

Je suis un étudiant de premier cycle d'études, et je suis confronté à petit problème dans l'octroi de droits de propriété à un utilisateur A à une procédure stockée étant détenue par l'utilisateur B dans la base de données en mode Oracle = xe.

S'il vous plaît aidez-moi à écrire des commandes SQL pour l'octroi de droits de propriété sur xyz procédure stockée à un autre utilisateur A.

Était-ce utile?

La solution

Je ne suis pas sûr que je comprends ce que vous entendez par « droits de propriété ».

Si l'utilisateur B possède une procédure stockée, l'utilisateur B peut accorder l'autorisation d'un utilisateur pour exécuter la procédure stockée

GRANT EXECUTE ON b.procedure_name TO a

L'utilisateur A alors appeler la procédure en utilisant le nom complet, i.e..

BEGIN
  b.procedure_name( <<list of parameters>> );
END;

Sinon, l'utilisateur A peut créer un synonyme afin d'éviter d'avoir à utiliser le nom de procédure qualifié.

CREATE SYNONYM procedure_name FOR b.procedure_name;

BEGIN
  procedure_name( <<list of parameters>> );
END;

Autres conseils

Vous ne pouvez pas faire ce que je pense que vous demandez de le faire.

Les seuls privilèges que vous pouvez accorder sur les procédures sont EXECUTE et DEBUG.

Si vous voulez permettre à l'utilisateur B pour créer une procédure utilisateur Un schéma, alors l'utilisateur B doit avoir le privilège CREATE ANY PROCEDURE. TOUTE PROCEDURE et ALTER DROP TOUTE PROCEDURE sont les autres privilèges applicables nécessaires pour modifier ou procédures utilisateur chute A pour l'utilisateur B. Tous sont compris privilèges large, car il ne restreint pas l'utilisateur B à un schéma particulier. L'utilisateur B doit être très fiable si elle est accordée ces privilèges.

EDIT:

Comme mentionné Justin, la façon de donner les droits d'exécution à A une procédure appartenant à B:

GRANT EXECUTE ON b.procedure_name TO a;

Forfaits et procédures stockées dans Oracle exécuter par défaut en utilisant les droits de l'emballage / procédure PROPRIÉTAIRE, pas utilisateur connecté.

Donc, si vous appelez un package qui crée un utilisateur par exemple, son propriétaire du paquet, pas l'utilisateur appelant que les besoins créer privilèges utilisateur. L'appelant a juste besoin d'avoir l'autorisation d'exécution sur le paquet.

Si vous préférez que le paquet doit être exécuté en utilisant les autorisations de l'utilisateur appelant, puis lors de la création du package, vous devez spécifier AUTHID CURRENT_USER

Oracle documentation "droits Invoker vs Definer droits" a plus d'informations

Sur votre compte DBA, donner userB le droit de créer une procédure en utilisant la subvention grant create any procedure to USERB

La procédure se penchera

CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE
--Must add the line below
AUTHID CURRENT_USER AS
  BEGIN
  --DO SOMETHING HERE
  END
END

GRANT EXECUTE ON USERB.USERB_PROCEDURE TO USERA

Je sais que c'est une question très ancienne, mais j'espère que je pourrais puce un peu.

SQL> grant create any procedure to testdb;

Ceci est une commande lorsque l'on veut donner à l'utilisateur de créer un privilège « de testdb ».

scroll top