Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie repliziert man Schema mit den gleichen Privilegien eines bestehenden Kontos in Oracle?

Öffnen Sie in Oracle SQL Developer den Abschnitt DBA, Sicherheit und Benutzer.

Wählen Sie Ihr Konto aus.

Klicken Sie mit der rechten Maustaste.

Wählen, Like erstellen.

Aktivieren Sie „Objektprivilegien kopieren“

Geben Sie den neuen Benutzernamen/das neue Passwort ein.

Voila.

Gehen Sie zur SQL-Seite, um den Code anzuzeigen, den wir für Sie aus dem Datenwörterbuch entnommen haben.

Es hat Kontingente, Rollen, Systemprivilegien und Objektprivilegien übernommen.

In Version 18.1 können Sie auch einfach den Benutzer öffnen und zur SQL-Seite gehen und den Schemanamen in den dort bereitgestellten Code kopieren/einfügen/ersetzen.

Ach! (Ich höre Sie sagen, ich brauche den CODE, um dies zu tun.)

Sie können den SQL-Code sehen, den wir verwenden, um diese Informationen aus der DB zu erhalten, indem Sie das Protokollfenster in SQL Developer öffnen und auf die Seite „Anweisungen“ klicken.

Hier ist dieser 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;