Export System-, Rollen- und Objektrechte mit dbms_metadata

von Tobias Redmann

In einem Projekt hatte ich kürzlich die Aufgabe System-, Rollen– und Objektrechten diverser Datenbankuser zu extrahieren. Ich hatte mich für das von Oracle bereitgestellte Supplied Package dbms_metadata entschieden, da mir das aufwendige Auslesen aus dem Oracle Data Dictionary für nicht mehr zeitgemäß erschien.

Die Besonderheit bestand zudem darin, lediglich die GRANTs des SYS Users zu exportieren und nicht die Objektberechtigungen anderer DB-USER.

Mit der Procedure dbms_metadata.get_granted_ddl erhalte ich leider alle Rechte/Berechtigungen. Hier ist keine weitere Filterung/Eingrenzung möglich – z.B. gebe mir nur Berechtigungen vom USER SYS.

Lösungsansatz dbms_metadata.get_granted_xml

Ich lasse mir anstelle der generierten DDLs eine XML-Struktur zurück geben. Diese wird mittels XMLTABLE Funtkion aufbereitet, sodass ich mit Standard SQL meine WHERE Bedingung formulieren kann.
Des Weiteren habe ich den ORACLE BUG zum Extrahieren der CONSUMER GROUPS – nur wichtig wenn der RESOURCE MANAGER genutzt wird – umgangen (11.2.0.4.0).

Das folgende SQLPlus Script erstellt ein SQL-File mit den Berechtigungen des gewünschten DB-Users, wobei bei den vergebenen Objektberechtigungen nur die des Users SYS betrachtet werden.

SCHREIBEN SIE EINEN KOMMENTAR