Zduplikuj użytkownika bazy danych Oracle

17

Będziemy mieć zewnętrznych audytorów, którzy przeprowadzą przegląd naszej bazy danych Oracle. Będą uruchamiać narzędzie do przeprowadzenia przeglądu i do tego wymagają identyfikatora użytkownika, który może połączyć się z bazą danych i pobrać z niej informacje.

W tym celu mamy istniejącego użytkownika w bazie danych. Jest to jednak identyfikator produkcji i nie możemy sobie pozwolić na jego zablokowanie. Chcielibyśmy sklonować / zduplikować ten identyfikator, w tym jego role i uprawnienia.

Czy istnieje sposób, aby to zrobić w Oracle?

Gommel
źródło

Odpowiedzi:

21

Tworzenie użytkownika:

select dbms_metadata.get_ddl( 'USER', 'PHIL' ) from dual;

Domyślna rola:

select dbms_metadata.get_granted_ddl( 'DEFAULT_ROLE', 'PHIL' ) from dual;

Dotacje systemowe:

select dbms_metadata.get_granted_ddl( 'SYSTEM_GRANT', 'PHIL' ) from  dual;

Dotacje na obiekt:

select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', 'PHIL' ) from dual;

Przyznanie roli:

select dbms_metadata.get_granted_ddl( 'ROLE_GRANT', 'PHIL' ) from dual;

Kwoty:

select dbms_metadata.get_granted_ddl( 'TABLESPACE_QUOTA', 'PHIL' ) from dual;

Jeśli którykolwiek z powyższych nie ma danych wyjściowych, otrzymasz wyjątek, który wygląda mniej więcej tak:

SQL> select dbms_metadata.get_granted_ddl( 'TABLESPACE_QUOTA', 'PHIL' ) from dual;
ERROR:
ORA-31608: specified object of type TABLESPACE_QUOTA not found
ORA-06512: at "SYS.DBMS_METADATA", line 4018
ORA-06512: at "SYS.DBMS_METADATA", line 5991
ORA-06512: at line 1

no rows selected

SQL>

Następnie wyszukaj i zamień dane wyjściowe, aby zmienić nazwę użytkownika.

Philᵀᴹ
źródło
Zauważ, że generowanie DDL otacza istniejącego użytkownika podwójnymi cudzysłowami; dzięki temu zamiana istniejącej nazwy użytkownika jest bardzo prosta.
Andrew Wolfe,
1
Aby odnieść sukces, ROLE_GRANT musi poprzedzać instrukcję DEFAULT_ROLE podczas tworzenia nowego użytkownika.
Theofilos
@ Dzięki Theofilos, edytowane
Betlista