Aus den dbms_metadata
Dokumentation:
Wenn nicht privilegierten Benutzern irgendeine Form von Zugriff auf ein Objekt im Schema einer anderen Person gewährt wird, können sie die Berechtigungsspezifikation über die Metadaten-API abrufen, jedoch nicht die eigentlichen Metadaten des Objekts.
Wenn Sie also nicht als privilegierter Benutzer verbunden sind, können Sie die DDL für die Objekte eines anderen Benutzers nicht sehen. Sie müssten sich als SYS
verbinden , oder haben die SELECT_CATALOG_ROLE
Rolle, die Ihrem Benutzer gewährt wurde, um die Objektdefinition von XT abzurufen.
Auch mit dieser Rolle:
In gespeicherten Prozeduren, Funktionen und Definierer-Rechtepaketen sind Rollen (wie SELECT_CATALOG_ROLE) deaktiviert. Daher kann ein solches PL/SQL-Programm nur Metadaten für Objekte in seinem eigenen Schema abrufen. Wenn Sie ein PL/SQL-Programm schreiben möchten, das Metadaten für Objekte in einem anderen Schema abruft (basierend auf dem Besitz von SELECT_CATALOG_ROLE durch den Aufrufer), müssen Sie dem Programm Aufruferrechte geben.
Wenn Sie dbms_metadata
aufrufen von einem anonymen PL/SQL-Block, das spielt keine Rolle, aber wenn Sie es von einer Prozedur aus aufrufen, müssen Sie eine AUTHID
einfügen -Klausel in der Prozedurdeklaration, indem AUTHID CURRENT_USER
hinzugefügt wird .