sql >> Database >  >> RDS >> Oracle

Hoe een schema te repliceren met dezelfde privileges van een bestaand account in Oracle?

Open in Oracle SQL Developer de sectie DBA, Beveiliging en Gebruikers.

Selecteer uw account.

Klik met de rechtermuisknop.

Kies, Maak Vind ik leuk.

Schakel 'Objectpriv's kopiëren' in

Geef de nieuwe gebruikersnaam/het nieuwe wachtwoord op.

Voilà.

Ga naar de SQL-pagina om de code te zien die we voor je uit de datadictionary hebben geplukt.

Het heeft quota's, rollen, systeemrechten en objectrechten gegrepen.

In versie 18.1 kunt u ook gewoon de Gebruiker openen en naar de SQL-pagina gaan en de schemanaam kopiëren/plakken/vervangen in de daar geleverde code.

Helaas! (Ik hoor je zeggen, ik heb de CODE nodig om dit te doen.)

U kunt de SQL zien die we gebruiken om deze informatie uit de database te halen, door het Log-paneel in SQL Developer te openen en op de Statements-pagina te klikken.

Hier is die 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;


  1. Msql:groei in de loop van de tijd tellen

  2. Hoe hergebruik van verbindingen in jdbc pool te forceren?

  3. Kan geen verbinding maken met MySQL via PHP-script bij gebruik van mysqli of PDO MAAR mysql werkt

  4. Informatie krijgen over alle soorten gegevens die in een bepaald pakket zijn gedeclareerd?