Je suis un étudiant de premier cycle et je n’éprouve guère de difficultés à accorder des droits de propriété à un utilisateur A sur une procédure stockée appartenant à l’utilisateur B de la base de données Oracle 10g mode = xe.
Aidez-moi à écrire les commandes SQL pour accorder les droits de propriété sur les procédures stockées xyz à un autre utilisateur A.
Je ne suis pas sûr de comprendre 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 A l'autorisation d'exécuter la procédure stockée.
GRANT EXECUTE ON b.procedure_name TO a
L’utilisateur A appelle ensuite la procédure en utilisant le nom complet, c.-à-d.
BEGIN
b.procedure_name( <<list of parameters>> );
END;
Sinon, l'utilisateur A peut créer un synonyme afin d'éviter de devoir utiliser le nom de procédure qualifié complet.
CREATE SYNONYM procedure_name FOR b.procedure_name;
BEGIN
procedure_name( <<list of parameters>> );
END;
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 de l'utilisateur A, l'utilisateur B doit disposer du privilège CREATE ANY PROCEDURE. ALTER ANY PROCEDURE et DROP TOY PROCEDURE sont les autres privilèges applicables requis pour modifier ou supprimer des procédures utilisateur A pour l'utilisateur B. Tous ces privilèges sont étendus, car ils ne restreignent pas l'utilisateur B à un schéma particulier. L'utilisateur B doit être hautement sécurisé si ces privilèges lui sont accordés.
MODIFIER:
Comme Justin l'a mentionné, la manière de donner des droits d'exécution à A pour une procédure appartenant à B:
GRANT EXECUTE ON b.procedure_name TO a;
Sur votre compte DBA, donnez à USERB le droit de créer une procédure à l'aide de grant grant create any procedure to USERB
La procédure va regarder
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 la question est très ancienne, mais j’espère pouvoir l’éclipser un peu.
Les packages et les procédures stockées dans Oracle s'exécutent par défaut en utilisant les droits du propriétaire/de la procédure/du package, et non de l'utilisateur actuellement connecté.
Ainsi, si vous appelez un package qui crée un utilisateur, par exemple, c'est le propriétaire du package, et non l'utilisateur appelant qui a besoin du privilège de création d'utilisateur. L'appelant doit simplement avoir une autorisation d'exécution sur le paquet.
Si vous préférez que le package soit exécuté avec les autorisations de l'utilisateur appelant, vous devez spécifier AUTHID CURRENT_USER lors de sa création.
La documentation Oracle "Droits de l'invocateur vs droits du définiteur" contient des informations complémentaires http://docs.Oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575
J'espère que cela t'aides.
SQL> grant create any procedure to testdb;
C'est une commande quand on veut donner le privilège de créer à "testdb".