Дублировать пользователя базы данных Oracle

17

У нас будут внешние аудиторы для проверки нашей базы данных Oracle. Они будут запускать инструмент для выполнения проверки, и для этого им потребуется идентификатор пользователя, который может подключаться к базе данных и получать информацию из нее.

У нас есть пользователь в базе данных для этого. Однако это производственный идентификатор, и мы не можем позволить его заблокировать. Мы хотели бы клонировать / дублировать этот идентификатор, включая его роли и права.

Есть ли способ, которым мы можем сделать это в Oracle?

Gommel
источник

Ответы:

21

Создание пользователя:

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

Роль по умолчанию:

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

Системные гранты:

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

Объект предоставляет:

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

Роль грантов:

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

Квоты:

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

Если что-либо из вышеперечисленного не имеет вывода, вы получите исключение, которое выглядит примерно так:

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>

Затем выполните поиск и замену на выходе, чтобы изменить имя пользователя.

Philᵀᴹ
источник
Обратите внимание, что генерация DDL оборачивает существующего пользователя в двойные кавычки; это делает замену существующего имени пользователя очень простой.
Эндрю Вульф
1
ROLE_GRANT должен предшествовать оператору DEFAULT_ROLE при создании нового пользователя, чтобы добиться успеха.
Theofilos
@ Theofilos спасибо, отредактировано
Betlista