La concessione di diritti sulla stored procedure per un altro utente di Oracle
-
29-09-2019 - |
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.
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".