Duplicar um usuário de banco de dados Oracle

17

Teremos auditores externos que farão uma revisão em nosso banco de dados Oracle. Eles estarão executando uma ferramenta para executar a revisão e, para isso, precisam de um ID do usuário que possa se conectar ao banco de dados e obter informações dele.

Temos um usuário existente no banco de dados para isso. No entanto, é um ID de produção e não podemos permitir que ele seja bloqueado. Gostaríamos de clonar / duplicar esse ID, incluindo suas funções e direitos.

Existe uma maneira de fazer isso no Oracle?

Gommel
fonte

Respostas:

21

Criação do usuário:

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

Função padrão:

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

Concessões do sistema:

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

Concessões de objetos:

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

Concessões de função:

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

Quotas:

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

Se alguma das opções acima não tiver saída, você receberá uma exceção parecida com esta:

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>

Em seguida, faça uma pesquisa e substitua na saída para alterar o nome de usuário.

Philᵀᴹ
fonte
Observe que a geração DDL envolve o usuário existente entre aspas duplas; isso facilita muito a substituição do nome de usuário existente.
Andrew Wolfe
1
O ROLE_GRANT deve preceder a instrução DEFAULT_ROLE ao criar o novo usuário para obter êxito.
Theofilos
@Theofilos obrigado, editado
Betlista 04/12