sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo replicar el esquema con los mismos privilegios de una cuenta existente en Oracle?

En Oracle SQL Developer, abra la sección DBA, Seguridad y Usuarios.

Seleccione su cuenta.

Haz clic derecho.

Elija, Crear Me gusta.

Activar 'Copiar privilegios de objeto'

Proporcione el nuevo nombre de usuario/contraseña.

Listo.

Vaya a la página de SQL para ver el código que extrajimos del diccionario de datos para usted.

Ha obtenido cuotas, funciones, privilegios del sistema y privilegios de objetos.

En la versión 18.1, también puede simplemente abrir el Usuario e ir a la página SQL y copiar/pegar/reemplazar el nombre del esquema en el código proporcionado allí.

¡Pobre de mí! (Te escucho decir, necesito el CÓDIGO para hacer esto).

Puede ver el SQL que estamos usando para obtener esta información de la base de datos abriendo el panel Registro en SQL Developer y haciendo clic en la página Estados de cuenta.

Aquí está ese código:

select M.NAME,
       decode(
    NVL(
        S.ADMIN_OPTION,
        'NULL'
    ),
    'NO',
    'YES',
    'NULL',
    'NO',
    'YES'
) GRANTED,
       NVL(
    ADMIN_OPTION,
    'NO'
) ADMIN
  from SYSTEM_PRIVILEGE_MAP M,
       (
    select *
      from DBA_SYS_PRIVS
     where (
        GRANTEE   =?
            or ?         = null
    )
) S
 where S.PRIVILEGE (+)   = M.NAME
 order by 1;

select R.ROLE,
       decode(
    S.NAME,
    R.ROLE,
    'YES',
    'NO'
) GRANTED,
       NVL(
    S.ADMIN,
    'NO'
) ADMIN,
       NVL(
    S.DEF,
    'NO'
) DEF
  from DBA_ROLES R,
       (
    select GRANTED_ROLE NAME,
           ADMIN_OPTION ADMIN,
           DEFAULT_ROLE DEF
      from DBA_ROLE_PRIVS
     where GRANTEE   =?
) S
 where S.NAME (+)   = R.ROLE
   and R.AUTHENTICATION_TYPE != 'GLOBAL'
 order by 1;

select OWNER,
       TABLE_NAME,
       PRIVILEGE,
       GRANTABLE
  from DBA_TAB_PRIVS
 where GRANTEE   =?;

select ACCOUNT_STATUS,
       DEFAULT_TABLESPACE DEF,
       TEMPORARY_TABLESPACE TEMP,
       PASSWORD,
       EXTERNAL_NAME,
       EDITIONS_ENABLED,
       ALL_SHARD
  from DBA_USERS
 where USERNAME   =?;

select T.TABLESPACE_NAME,
       NVL(
    Q.UNLIMITED,
    'NO'
) UNLIMITED,
       Q.QUOTA,
       Q.UNIT,
       T.CONTENTS
  from DBA_TABLESPACES T,
       (
    select TABLESPACE_NAME,
           decode(
        MAX_BYTES,
        -1,
        'YES',
        'NO'
    ) UNLIMITED,
           decode(
        MAX_BYTES,
        -1,
        null,
        MAX_BYTES / 1024
    ) QUOTA,
           'K' UNIT
      from DBA_TS_QUOTAS
     where (
        USERNAME   =:1
            or :1         = null
    )
) Q
 where Q.TABLESPACE_NAME (+)   = T.TABLESPACE_NAME
 order by 1;