martes, 21 de febrero de 2012

Obteniendo el DDL de un rol

Si quieres copiar un rol y no tienes un sapo a la mano, puedes usar el paquete DBMS_METADATA para obtener el DDL que necesitas para recrearlo:

SQL> exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true);

PL/SQL procedure successfully completed.

SQL> SET PAGESIZE 0
SQL> SET LONG 90000
SQL> SELECT DBMS_METADATA.GET_DDL('ROLE', role) || ';' FROM dba_roles WHERE ROLE='MYROLE';

CREATE ROLE "MYROLE";
;

SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('ROLE_GRANT',role) FROM ROLE_ROLE_PRIVS
WHERE ROLE='MYROLE' group by ROLE;

GRANT "CONNECT" TO "MYROLE";

GRANT "EXP_FULL_DATABASE" TO "MYROLE";


SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('SYSTEM_GRANT',role) FROM ROLE_SYS_PRIVS
WHERE ROLE='MYROLE' group by ROLE;

no rows selected

SQL> SELECT DBMS_METADATA.GET_GRANTED_DDL('OBJECT_GRANT',role) FROM ROLE_TAB_PRIVS
WHERE ROLE='MYROLE' group by ROLE;

no rows selected

Como puedes ver, hay un ; extra después de la sentencia CREATE ROLE que puedes ignorar sin problemas, y para este rol no hay derechos sobre el sistema u objetos.

Más información:

Oracle Roles
57 DBMS_METADATA

No hay comentarios.:

Publicar un comentario