2012-11-15 8 views
11

Ich muss dbms_lock.sleep Prozedur von Benutzer usr1 verwenden. Ich kann mich nicht als sys anmelden, aber ich habe ein Passwort für den Benutzer usr2, der die Berechtigung "Privileg eines beliebigen Objekts gewähren" hat. Allerdings, wenn ich in so usr2 angemeldet bin und versuchenWie gewähren Sie ausführen auf dbms_lock in Oracle?

grant execute on sys.dbms_lock to usr1 

ich die ORA-01031 „nicht ausreichende Berechtigungen“ Exception zu erteilen. Das Gleiche funktioniert mit einem Testpaket für einen anderen Benutzer. Werden die Systempakete speziell behandelt oder habe ich etwas verpasst?

+0

Oracle hat [versprochen, dies in einer zukünftigen Version zu beheben, indem er 'dbms_session' eine' sleep'-Prozedur hinzufügt] (https://community.oracle.com/ideas/4852). –

Antwort

11

Die Systempakete werden speziell behandelt, abhängig vom Wert des Initialisierungsparameters O7_DICTIONARY_ACCESSIBILITY. Wenn das FALSE ist, das ist der Standardwert seit Oracle 9i, dann gelten ANY Berechtigungen nicht für das Data Dictionary. Die Dokumentation bezieht sich darauf als "Wörterbuchschutz".

Die nächste, die ich in der Sicherheitsanleitung finden kann - here und here - beziehen Sie sich nur auf Tabellen als Beispiele.

Der Oracle-Support-Hinweis 174753.1 besagt jedoch ausdrücklich, dass der Wörterbuchschutz grant any object privilege ersetzt. Ich darf das nicht zitieren, aber es erklärt, was du siehst; Es könnte sich lohnen, nachzuschauen, wenn Sie Zugang dazu haben.

Also, der einzige Weg für usr2 in der Lage zu grant execute on sys.dbms_lock to usr1 ist für den DBA getan grant execute on sys.dbms_lock to usr2 with grant option getan haben.

Wie Ben sagt, müssen Sie entweder den DBA dazu bringen, die Berechtigung zu usr1 direkt zu erteilen, oder die with grant option zu den Privilegien hinzufügen, die usr2 erteilt wurden; Oder haben Sie usr2 Erstellen Sie eine Wrapper-Prozedur um den dbms_lock Aufruf und gewähren Sie Berechtigungen auf usr1.

+0

Gerade stolperte [diese alte Antwort] (http://stackoverflow.com/a/2564566/266304), die einen Wrapper um 'dbms_lock' zeigt. –

4

Es klingt, als ob SYS die DBA-Rolle nicht erteilt wurde oder dass SYS das GRANT ANY OBJECT-Privileg nicht hat. Zitat aus the documentation

Um ein Objekt Privileg zu gewähren, müssen Sie das Objekt besitzen, oder der Eigentümer von das Objekt müssen Sie die Objektberechtigungen mit dem GRANT OPTION erteilt haben, oder Sie müssen die GRANT erteilt wurden JEDES OBJEKT-PRIVILEGE Systemprivileg. Wenn Sie das OBJEKT-PRIVILEGE GEWÄHREN haben, können Sie die Objektberechtigung nur erteilen, wenn der Objektbesitzer die gleiche Objektberechtigung haben darf.

Dies bedeutet, dass Sie keine Ausführung auf dbms_lock gewähren können, da SYS nicht dazu in der Lage gewesen wäre.

Bei der Installation SYS is automatically granted the DBA role vielleicht hat jemand dies geändert oder einen anderen Benutzer mit der DBA-Rolle erstellt.

In beiden Fällen müssen Sie Ihren DBA einbeziehen, wenn Sie nur Zugriff auf diese beiden Benutzer haben. Bitten Sie sie, den Benutzern, die sie benötigen, die Pakete auszuführen, die Sie benötigen. Es liegt an ihnen, Ihnen einen guten Grund zu geben, warum sie Ihnen nicht die Pakete geben, die Sie benötigen, um Ihre Arbeit zu erledigen.

Wenn Sie keinen vollständigen Zugriff auf dbms_lock erhalten, können Sie immer eine Prozedur in einem anderen Benutzer erstellen, die dbms_lock.sleep umschließt, die Sie benötigen, und dann die Ausführung dieses Vorgangs allein gewähren.

+2

Ich sehe das gleiche (11gR2); aber 'SYS' kann auf' dbms_lock' definitiv execute gewähren und muss es anscheinend 'usr2' gewähren oder das erhält einen unbekannten Tabellenfehler anstatt unzureichende Privilegien. Das Gleiche passiert mit anderen Paketen, nicht nur diesem. Obwohl ich es noch nirgends dokumentiert gefunden habe, scheint es so, als ob "SYS" -Objekte eine andere Schutzschicht haben; was ich denke, ist nicht völlig unvernünftig. Interessant. –

+1

Ich werde überprüfen, was Sie sagen, aber ich denke, ein Benutzer kann immer ausführen auf sein eigenes Paket für jedermann, nicht wahr? –

Verwandte Themen