Default-Admin-Benutzer beim Anlegen einer PDB mit dem DBCA

4. Juli 2016 Aus Von Markus Flechtner

Beim Anlegen einer CDB mit mindestens einer PDB wird neben den bekannten Benutzern SYS und SYSTEM ein Benutzer PDBADMIN angelegt. Wo wird dieser Benutzer angelegt und welche Rechte hat er?

Wenn man eine leere CDB (ohne PDB anlegt), dann werden nur die Standard-Benutzer SYS und SYSTEM angelegt:

001-dbca-01

002-dbca-002

Wenn man aber beim Anlegen der CDB eine oder mehrere Pluggable Datenbanken anlegt, dann wird der User PDBADMIN mit angelegt:

003-dbca-1pdb-001

004-dbca-1pdb-002

Ist dass nun ein globaler (“common”) User oder ein lokaler User und welche Rechte hat er?

SQL> show pdbs

 CON_ID     CON_NAME           OPEN MODE RESTRICTED
---------- ------------------ ---------- ----------
 2         PDB$SEED           READ ONLY   NO
 3         TESTPDB1           READ WRITE  NO

SQL> select con_id,username,common from cdb_users 
   2 where username like 'PDB%';

CON_ID      USERNAME                    COM
---------- ---------------------------- ---
 3          PDBADMIN                    NO

Es ist also ein lokaler User, der nur in der neuen PDB vorhanden ist.

Achtung: werden mehrere PDBS beim Anlegen der CDB angelegt, so hat der User PDBADMIN in allen PDBs das gleiche initiale Password. Man sollte es also aus Sicherheitsgründen ändern, wenn die Datenbanken später von verschiedenen Personen administriert werden oder zu verschiedenen Applikationen gehören.

Welche Rechte hat PDBADMIN?

SQL> select con_id,grantee,granted_role from cdb_role_privs where grantee='PDBADMIN';

CON_ID      GRANTEE            GRANTED_ROLE
---------- ------------------ ------------------
 3          PDBADMIN           PDB_DBA

SQL> select con_id,grantee,privilege from cdb_sys_privs where grantee='PDBADMIN';
no rows selected

SQL> select con_id,grantee,table_name,privilege from cdb_tab_privs where grantee='PDBADMIN';
no rows selected

Welche Rechte verbergen sich hinter der Rolle PDB_DBA?

SQL> select con_id,grantee,table_name,privilege from cdb_tab_privs where grantee='PDB_DBA';

CON_ID GRANTEE TABLE_NAME                PRIVILEGE
------ -------- ------------------------ -------------------------
 1     PDB_DBA PDB_PLUG_IN_VIOLATIONS     SELECT
 1     PDB_DBA PDB_ALERTS                 SELECT
 3     PDB_DBA PDB_ALERTS                 SELECT
 3     PDB_DBA PDB_PLUG_IN_VIOLATIONS     SELECT
 
SQL> select con_id,grantee,privilege from cdb_sys_privs where grantee='PDB_DBA';

CON_ID     GRANTEE     PRIVILEGE
---------- ---------- ------------------------------
 3         PDB_DBA     SET CONTAINER
 3         PDB_DBA     CREATE SESSION
 3         PDB_DBA     CREATE PLUGGABLE DATABASE


SQL> select con_id,grantee,granted_role from cdb_role_privs where grantee='PDB_DBA';

CON_ID      GRANTEE     GRANTED_ROLE
---------- ---------- ------------------------------
 3          PDB_DBA     CONNECT

Für die “normalen” DBA-Tätigkeiten in der PDB fehlt dem PDBADMIN also die DBA-Rollle auf PDB-Ebene.

Wenn man über den DBCA eine PDB zu einer vorhandenen CDB hinzufügt, dann wird ebenfalls ein Admin-User mit der Rolle PDB_DBA angelegt. Allerdings kann man in diesem Fall den Benutzernamen frei wählen:

005-dbca-add-pdb

Wenn man eine Pluggable Database mittels SQL*Plus-Befehl “CREATE PLUGGABLE DATABASE” erstellt, dann kann man über den “ROLES”-Parameter der Rolle “PDB_DBA” weitere Rollen hinzufügen:

SQL> CREATE PLUGGABLE DATABASE crm05 ADMIN USER crm05_adm IDENTIFIED BY manager ROLES=(DBA)
 2 PATH_PREFIX = '/u01/oradata/'
 3 STORAGE (MAXSIZE 2G MAX_SHARED_TEMP_SIZE 256M)
 4 FILE_NAME_CONVERT = ('/u01/oradata/TVD12CDB/pdbseed/','/u01/oradata/TVD12CDB/crm05/')
 5 DEFAULT TABLESPACE data 
 6 DATAFILE '/u01/oradata/TVD12CDB/crm05/data_01.dbf' SIZE 25M AUTOEXTEND ON MAXSIZE 512M
 6 TEMPFILE REUSE;
Pluggable database created.
SQL> ALTER PLUGGABLE DATABASE crm05 OPEN;

Pluggable database altered.

SQL> CONNECT crm05_adm/manager@training:1521/crm05.markusdba.local
Connected.

SQL> select granted_role from dba_role_privs 
   2 where grantee='PDB_DBA';
GRANTED_ROLE
-----------------------------------
DBA

 

Ergänzung 19.08.2016 – Die Administrations-Rollen CDB_DBA und PDB_DBA

Neben der oben aufgeführten neuen Rolle PDB_DBA gibt es auch noch die neue Rolle CDB_DBA. Werfen wir doch mal einen Blick auf die Rechte, die diese beiden Rolle haben – auf Ebene des CDB$ROOT-Containers und auf PDB-Ebene.

CDB$ROOT:

SQL> show con_id con_name

CON_ID
------------------------------
1

SQL> select * from cdb_roles where role like '%DBA%' and con_id in (1,3);

ROLE PASSWORD AUTHENTICAT COM O CON_ID
-------------------- -------- ----------- --- - ----------
DBA NO NONE YES Y 1
CDB_DBA NO NONE YES Y 1
PDB_DBA NO NONE YES Y 1
XDBADMIN NO NONE YES Y 1
OLAP_DBA NO NONE YES Y 1
LBAC_DBA NO NONE YES Y 1
DBA NO NONE YES Y 3
CDB_DBA NO NONE YES Y 3
PDB_DBA NO NONE YES Y 3
XDBADMIN NO NONE YES Y 3
OLAP_DBA NO NONE YES Y 3
LBAC_DBA NO NONE YES Y 3

SQL> select * from dba_sys_privs where grantee = 'CDB_DBA';

GRANTEE PRIVILEGE ADM COM
------- ---------------------------------------- --- ---
CDB_DBA SET CONTAINER NO YES

SQL> select * from dba_role_privs where grantee = 'CDB_DBA';
no rows selected

SQL> select privilege,table_name from dba_tab_privs where grantee = 'CDB_DBA';

PRIVILEGE TABLE_NAME
--------- ----------------------------------------
SELECT    PDB_PLUG_IN_VIOLATIONS
SELECT    PDB_ALERTS
SELECT    CDB_LOCAL_ADMIN_PRIVS

SQL> select * from role_role_privs where role = 'CDB_DBA';
no rows selected

SQL> select * from dba_sys_privs where grantee = 'PDB_DBA';
no rows selected

SQL> select * from dba_role_privs where grantee = 'PDB_DBA';
no rows selected

SQL> select privilege,table_name from dba_tab_privs where grantee = 'PDB_DBA';

PRIVILEGE TABLE_NAME
--------- ----------------------------------------
SELECT    PDB_PLUG_IN_VIOLATIONS
SELECT    PDB_ALERTS

SQL> select * from role_role_privs where role = 'PDB_DBA';
no rows selected

Und auf PDB-Ebene:

SQL> show con_id con_name

CON_ID
------------------------------
3

SQL> select * from dba_roles where role like '%DBA%';

ROLE PASSWORD AUTHENTICAT COM O
--------------- -------- ----------- --- -
DBA NO NONE YES Y
CDB_DBA NO NONE YES Y
PDB_DBA NO NONE YES Y
XDBADMIN NO NONE YES Y
OLAP_DBA NO NONE YES Y
LBAC_DBA NO NONE YES Y

SQL> select * from dba_sys_privs where grantee = 'PDB_DBA';

GRANTEE PRIVILEGE ADM COM
------- ------------------------------ --- ---
PDB_DBA SET CONTAINER NO NO
PDB_DBA CREATE PLUGGABLE DATABASE NO NO
PDB_DBA CREATE SESSION NO NO

SQL> select * from dba_role_privs where grantee = 'PDB_DBA';
no rows selected

SQL> select privilege,table_name from dba_tab_privs where grantee = 'PDB_DBA';

PRIVILEGE TABLE_NAME
--------------- ----------------------------------------
SELECT PDB_PLUG_IN_VIOLATIONS
SELECT PDB_ALERTS

SQL> select * from role_role_privs where role = 'PDB_DBA';
no rows selected

Weiterführende Links:


Werbung (Amazon-Partner-Link)