Erteilen von Rechten auf Stored Procedure an einem anderen Benutzer von Oracle
-
29-09-2019 - |
Frage
Ich bin ein Student des Grundstudiums, und ich bin vor kleines Problem in Eigentumsrechten an einen Benutzer A auf eine gespeicherte Prozedur Gewährung von Benutzern B in der Datenbank Oracle 10g-Modus = xe gehört zu werden.
Bitte helfen Sie mir in dem Schreiben von SQL-Befehlen für Eigentumsrechte auf gespeicherte Prozedur xyz an einem anderen Benutzer A zu gewähren.
Lösung
Ich bin nicht sicher, dass ich verstehe, was Sie unter „Eigentumsrechte“ bedeuten.
Wenn Benutzer B eine gespeicherte Prozedur besitzt, kann Benutzer B Benutzer A die Berechtigung erteilen, die gespeicherte Prozedur
laufenGRANT EXECUTE ON b.procedure_name TO a
Benutzer A würde dann die Prozedur aufrufen den vollständig qualifizierten Namen verwenden, d.
BEGIN
b.procedure_name( <<list of parameters>> );
END;
Alternativ können Benutzer A ein Synonym erstellen, um zu vermeiden, der vollständig qualifizierten Prozedurnamen verwenden.
CREATE SYNONYM procedure_name FOR b.procedure_name;
BEGIN
procedure_name( <<list of parameters>> );
END;
Andere Tipps
Sie können nicht tun, was ich denke, Sie fragen zu tun.
Die einzigen Berechtigungen, die Sie für die Verfahren gewähren können, sind EXECUTE und DEBUG.
Wenn Sie Benutzer B zulassen möchten, ein Verfahren in Benutzer ein Schema zu erstellen, muss der Benutzer B haben das jede Prozedur Privileg CREATE. ALTER ANY PROCEDURE und DROP ANY VERFAHREN sind die anderen anwendbaren Privilegien erforderlich zu ändern oder Drop Verfahren Benutzer A für Benutzer B. Alle sind breit gefächert Privilegien, da es nicht den Benutzer B auf ein bestimmtes Schema beschränken. Benutzer B sollte sehr vertraut werden, wenn diese Privilegien gewährt.
EDIT:
Wie Justin erwähnt, die Art und Weise der Ausführung Rechte A für ein Verfahren von B im Besitz zu geben:
GRANT EXECUTE ON b.procedure_name TO a;
Pakete und gespeicherte Prozeduren in Oracle standardmäßig ausgeführt werden unter Verwendung der Rechte des Pakets / procedure BESITZER, nicht die aktuell angemeldeten Benutzers.
Wenn Sie also ein Paket aufrufen, die ein Benutzer zum Beispiel erstellt, dessen das Paket Eigentümer, nicht die anrufende Benutzer die Bedürfnisse Benutzerberechtigungen erstellen. Der Anrufer muss nur Berechtigung für das Paket auszuführen hat.
Wenn Sie lieber, dass das Paket ausgeführt werden soll, der anrufenden Benutzerberechtigungen verwenden, dann, wenn das Paket Erstellen Sie benötigen AUTHID CURRENT_USER angeben
Oracle-Dokumentation "Invoker Rights vs Definer Rechte" hat mehr Informationen
Auf Ihrem DBA-Konto, geben USERB das Recht, ein Verfahren unter Verwendung Erteilung Das Verfahren sieht Ich weiß, das ist eine sehr alte Frage, aber ich bin der Hoffnung, ich es ein bisschen Chip könnte. grant create any procedure to USERB
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
SQL> grant create any procedure to testdb;
Dies ist ein Befehl, wenn wir „testdb“ Benutzer erstellen Privilegien geben wollen.