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.

War es hilfreich?

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

laufen
GRANT 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 grant create any procedure to USERB

erstellen

Das Verfahren sieht

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

Ich weiß, das ist eine sehr alte Frage, aber ich bin der Hoffnung, ich es ein bisschen Chip könnte.

SQL> grant create any procedure to testdb;

Dies ist ein Befehl, wenn wir „testdb“ Benutzer erstellen Privilegien geben wollen.

scroll top