Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment répliquer le schéma avec les mêmes privilèges d'un compte existant dans Oracle ?

Dans Oracle SQL Developer, ouvrez la section DBA, Sécurité et Utilisateurs.

Sélectionnez votre compte.

Faites un clic droit.

Choisissez, créez comme.

Basculer sur "Copier les objets privés"

Indiquez le nouveau nom d'utilisateur/mot de passe.

Voilà.

Accédez à la page SQL pour voir le code que nous avons extrait du dictionnaire de données pour vous.

Il a récupéré des quotas, des rôles, des privilèges système et des privilèges d'objet.

Dans la version 18.1, vous pouvez également simplement ouvrir l'utilisateur et aller sur la page SQL et copier/coller/remplacer le nom du schéma dans le code qui y est fourni.

Hélas! (Je vous entends dire, j'ai besoin du CODE pour faire ça.)

Vous pouvez voir le SQL que nous utilisons pour obtenir ces informations à partir de la base de données, en ouvrant le panneau Log dans SQL Developer et en cliquant sur la page Statements.

Voici ce code :

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;