Duplicar un usuario de la base de datos Oracle

17

Tendremos auditores externos para realizar una revisión en nuestra base de datos Oracle. Ejecutarán una herramienta para realizar la revisión y, para eso, requieren una identificación de usuario que pueda conectarse a la base de datos y obtener información de ella.

Tenemos un usuario existente en la base de datos para esto. Sin embargo, es una identificación de producción y no podemos permitirnos bloquearla. Nos gustaría clonar / duplicar esta ID, incluidos sus roles y derechos.

¿Hay alguna manera de hacerlo en Oracle?

Gommel
fuente

Respuestas:

21

Creación de usuario:

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

Rol predeterminado:

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

Sistema de subvenciones:

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

Subvenciones de objeto:

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

Subvenciones de roles:

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

Cuotas:

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

Si alguno de los anteriores no tiene salida, obtendrá una excepción que se ve así:

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>

Luego haga una búsqueda y reemplace en la salida para cambiar el nombre de usuario.

Philᵀᴹ
fuente
Tenga en cuenta que la generación DDL envuelve al usuario existente entre comillas dobles; Esto hace que reemplazar el nombre de usuario existente sea muy simple.
Andrew Wolfe
1
El ROLE_GRANT debe preceder a la declaración DEFAULT_ROLE al crear el nuevo usuario para tener éxito.
Theofilos
@Theofilos gracias, editado
Betlista