2010-11-29 3 views
8

Je suis un étudiant de premier cycle, et je suis confronté à un petit problème en accordant des droits de propriété à un utilisateur A à une procédure stockée appartenant à l'utilisateur B en mode Oracle 10g de base de données = xe.Accorder des droits sur une procédure stockée à un autre utilisateur d'Oracle

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

Répondre

20

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'utilisateur une autorisation d'exécuter la procédure stockée

GRANT EXECUTE ON b.procedure_name TO a 

utilisateur A serait alors appeler la procédure en utilisant le nom complet, à savoir

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

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

CREATE SYNONYM procedure_name FOR b.procedure_name; 

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

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

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

Si vous souhaitez autoriser l'utilisateur B à créer une procédure dans le schéma utilisateur A, l'utilisateur B doit disposer du privilège CREATE ANY PROCEDURE. ALTER ANY PROCEDURE et DROP ANY PROCEDURE sont les autres privilèges applicables requis pour modifier ou supprimer les procédures de l'utilisateur A pour l'utilisateur B. Tous sont des privilèges étendus, car ils ne limitent pas l'utilisateur B à un schéma particulier. L'utilisateur B doit être hautement fiable si ces privilèges lui sont accordés.

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; 
+1

+1 Une approche moins radicale que CREER N'IMPORTE QUELLE PROCEDURE, mais aussi avec des pièges serait de donner à l'application en utilisant l'utilisateur B le mot de passe à l'utilisateur A lui permettant de se connecter en tant que cet utilisateur. Il semble que vous souhaitiez accorder des privilèges de niveau schéma, mais ceux-ci ne sont pas disponibles dans Oracle. –

+0

Ok, monsieur, dites-moi comment accorder des droits d'exécution à l'utilisateur A pour exécuter la procédure stockée de l'utilisateur B. – Basmah

0

paquets et des procédures stockées dans Oracle exécuter par défaut en utilisant les droits de la package/procedure OWNER, pas l'utilisateur actuellement connecté. Donc, si vous appelez un paquet qui crée un utilisateur, par exemple, c'est le propriétaire du paquet, pas l'utilisateur appelant qui a besoin de créer un privilège d'utilisateur. L'appelant doit juste 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

documentation Oracle « Invoker Droits vs Definer droits » a plus d'informations http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

J'espère que cela vous aide.

0
SQL> grant create any procedure to testdb; 

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

1

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 je J'espère que je pourrais l'ébrécher un peu.

Questions connexes