Sidebar

Hemos estado en ocasiones, que perdemos los permisos de los objetos, debido a un import de otra Base de Datos u algo similar.

Supongamos que te piden hacer un export de una BD1 (con permisos de un ambiente de Producción), luego importarlos a BD2 (con permisos de un ambiente de Desarrollo). Para no complicarte la vida jugando con los parámetros de la utilería EXP o IMP, te proponemos un método sencillo.

Siguiendo con este mismo ejemplo, antes de hacer el import a Desarrollo ejecuta el siguiente script (en tu bd de Desarrollo):

    spool otorga_permisos_despues_de_refresh.sql

    set heading off
    set linesi 220

    select 'grant ' || granted_role || ' to ' || grantee || ';' from dba_role_privs
    where grantee not in ('SYS','SYSTEM','XDB') and admin_option ='NO'
    union
    select 'grant ' || granted_role || ' to ' || grantee || ' with admin option;' from dba_role_privs
    where grantee not in ('SYS','SYSTEM','XDB') and admin_option ='YES'
    union
    select 'grant ' || privilege || ' to ' || grantee || ';' from dba_sys_privs
    where grantee not in ('SYS','SYSTEM','XDB') and admin_option ='NO'
    union
    select 'grant ' || privilege || ' to ' || grantee || ' with admin option;' from dba_sys_privs
    where grantee not in ('SYS','SYSTEM','XDB') and admin_option ='YES'
    union
    select 'grant ' || privilege || ' on ' || OWNER || '.' || TABLE_NAME || ' to ' || grantee || ';'
    from dba_tab_privs
    where grantee not in ('SYS','SYSTEM','XDB')
    /

    spool off

Esto te dejará un script llamado "otorga_permisos_despues_de_refresh" (proveniente del spool). Lo que tendrá dentro, son todos los permisos existentes antes de tu import. Así que solamente te queda ejecutarlo después de la carga de datos, para regresar los permisos a como estaban antes del "refresh".

Saludos

{mosimage}

Carlos Contreras
Oracle Certified DBA

 

 


Tips BD