Oracle
 sql >> Database >  >> RDS >> Oracle

Come replicare lo schema con gli stessi privilegi di un account esistente in Oracle?

In Oracle SQL Developer, apri la sezione DBA, sicurezza e utenti.

Seleziona il tuo account.

Fare clic con il pulsante destro del mouse.

Scegli, Crea Mi piace.

Attiva "Copia privilegi oggetto"

Fornisci il nuovo nome utente/password.

Voilà.

Vai alla pagina SQL per vedere il codice che abbiamo estratto per te dal dizionario dei dati.

Ha acquisito quote, ruoli, privilegi di sistema e privilegi di oggetti.

Nella versione 18.1, puoi anche semplicemente aprire l'utente e andare alla pagina SQL e copiare/incollare/sostituire il nome dello schema nel codice fornito lì.

Ahimè! (Ti sento dire, ho bisogno del CODICE per farlo.)

Puoi vedere l'SQL che stiamo usando per ottenere queste informazioni dal DB, aprendo il pannello Log in SQL Developer e facendo clic sulla pagina Statements.

Ecco quel codice:

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;