Domanda

Sono uno studente di studi universitari, e sto affrontando piccolo problema nella concessione dei diritti di proprietà ad un utente A ad una stored procedure di essere di proprietà dell'utente B in modalità database Oracle 10g = xe.

Si prega di aiutarmi a scrivere comandi SQL per la concessione di diritti di proprietà su stored procedure xyz ad un altro utente A.

È stato utile?

Soluzione

Non sono sicuro di aver capito cosa si intende per "diritti di proprietà".

Se dell'utente B possiede una stored procedure, Utente B può concedere un'autorizzazione utente per eseguire lo stored procedure

GRANT EXECUTE ON b.procedure_name TO a

L'utente A potrebbe quindi chiamare la procedura utilizzando il nome completo, cioè.

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

In alternativa, l'utente A può creare un sinonimo per evitare di dover utilizzare il nome della procedura completo.

CREATE SYNONYM procedure_name FOR b.procedure_name;

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

Altri suggerimenti

Non si può fare quello che penso si sta chiedendo di fare.

Gli unici privilegi è possibile concedere sulle procedure sono ESEGUI e DEBUG.

Se si desidera consentire all'utente B di creare una procedura di utente Uno schema, quindi l'utente B deve avere il privilegio di creare qualsiasi PROCEDURA. ALTER ogni procedura e rilasciare qualsiasi procedura sono gli altri privilegi applicabili tenute a modificare o procedure utente cadere una per l'utente B. Tutti sono di ampia portata privilegi, in quanto non limita l'utente B a un particolare schema. L'utente B deve essere altamente attendibile se concesso questi privilegi.

EDIT:

Come Justin detto, il modo per dare diritti di esecuzione alla A per una procedura di proprietà di B:

GRANT EXECUTE ON b.procedure_name TO a;

Pacchetti e stored procedure in Oracle di default eseguire utilizzando i diritti del pacchetto / procedura di proprietario, non l'utente attualmente connesso.

Quindi, se si chiama un pacchetto che crea un utente, ad esempio, il suo proprietario del pacchetto, non l'utente chiamante che i bisogni creano privilegi utente. Il chiamante ha solo bisogno di avere il permesso di esecuzione sulla confezione.

Se si preferisce che il pacchetto deve essere eseguito utilizzando le autorizzazioni dell'utente chiamante, quindi quando si crea il pacchetto è necessario specificare AUTHID CURRENT_USER

Oracle documentazione "Invoker Diritti vs Definer Diritti" ha più informazioni http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

Spero che questo aiuti.

Il tuo account DBA, dare USERB il diritto di creare una procedura mediante concessione grant create any procedure to USERB

La procedura sarà

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

So che questa è una domanda molto vecchio ma spero che potrei scheggiare un po '.

SQL> grant create any procedure to testdb;

Si tratta di un comando quando vogliamo dare creare privilegio utente "testdb".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top