Granting Multitenant Privileges as Common or Local

Neste artigo simples, vamos explorar a administração de privilégios do tipo common ou local, tanto a nível de root container ou PDBs, na arquitetura Multitetant.

Pela consulta abaixo, podemos ver que o privilégio de create session foi concedido para os usuários C##BRUNO (common) e LOCALUSER (local) nos containers seguintes:

[oracle@quiasma admin]$ sqlplus / as sysdba
 
SQL*Plus: Release 18.0.0.0.0 - Production on Tue Apr 13 05:20:43 2021
Version 18.13.0.0.0
 
Copyright (c) 1982, 2018, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.13.0.0.0
 
SQL> col grantee format a18
SQL> col privilege format a14
SQL> SELECT GRANTEE, PRIVILEGE, COMMON, CON_ID FROM CDB_SYS_PRIVS WHERE GRANTEE IN ('C##BRUNO', 'LOCALUSER');
 
GRANTEE            PRIVILEGE      COM     CON_ID
------------------ -------------- --- ----------
C##BRUNO           CREATE SESSION YES          1
LOCALUSER          CREATE SESSION NO           3
C##BRUNO           CREATE SESSION YES          3

Ao logar no PDB, temos a seguinte imagem:

SQL> conn system/oracle@HIPOFISE1
Connected.
SQL> col grantee format a18
SQL>
SQL> col privilege format a14
SQL> SELECT GRANTEE, PRIVILEGE, COMMON, CON_ID FROM CDB_SYS_PRIVS WHERE GRANTEE IN ('C##BRUNO', 'LOCALUSER');
 
GRANTEE            PRIVILEGE      COM     CON_ID
------------------ -------------- --- ----------
LOCALUSER          CREATE SESSION NO           3
C##BRUNO           CREATE SESSION YES          3

Concedendo privilégios para o common user, contemplando todos os containers:

SQL> conn / as sysdba
Connected.
SQL> GRANT CREATE TABLE, UNLIMITED TABLESPACE TO C##BRUNO CONTAINER=ALL;
 
Grant succeeded.
 
SQL> col grantee format a12
SQL> col privilege format a30
SQL> SELECT GRANTEE, PRIVILEGE, COMMON, CON_ID FROM CDB_SYS_PRIVS WHERE GRANTEE = 'C##BRUNO' ORDER BY 1,2;
 
GRANTEE      PRIVILEGE                      COM     CON_ID
------------ ------------------------------ --- ----------
C##BRUNO     CREATE SESSION                 YES          1
C##BRUNO     CREATE SESSION                 YES          3
C##BRUNO     CREATE TABLE                   YES          3
C##BRUNO     CREATE TABLE                   YES          1
C##BRUNO     UNLIMITED TABLESPACE           YES          3
C##BRUNO     UNLIMITED TABLESPACE           YES          1
 
6 rows selected.

Concedendo privilégio de criar sequence apenas no root container. Ou seja, faremos o local grant para um common user. O quanto pudermos evitar essa situação em ambientes oficiais, melhor, para evitar confusões.

SQL> SHOW CON_ID CON_NAME;
 
CON_ID
------------------------------
1
 
CON_NAME
------------------------------
CDB$ROOT
SQL> GRANT CREATE SEQUENCE TO C##BRUNO CONTAINER=CURRENT;
 
Grant succeeded.
 
SQL> SELECT GRANTEE, PRIVILEGE, COMMON, CON_ID FROM CDB_SYS_PRIVS WHERE GRANTEE = 'C##BRUNO' AND PRIVILEGE ='CREATE SEQUENCE';
 
GRANTEE      PRIVILEGE                      COM     CON_ID
------------ ------------------------------ --- ----------
C##BRUNO     CREATE SEQUENCE                NO           1

Concedendo privilégio para o common user apenas em um PDB:

SQL> ALTER SESSION SET CONTAINER=HIPOFISE1;
 
Session altered.
 
SQL> GRANT CREATE SYNONYM TO C##BRUNO CONTAINER=CURRENT;
 
Grant succeeded.
 
SQL> col grantee format a18
SQL> SELECT GRANTEE, PRIVILEGE, COMMON, CON_ID FROM CDB_SYS_PRIVS WHERE GRANTEE = 'C##BRUNO' AND PRIVILEGE ='CREATE SYNONYM';
 
GRANTEE            PRIVILEGE                      COM     CON_ID
------------------ ------------------------------ --- ----------
C##BRUNO           CREATE SYNONYM                 NO           3

Concedendo privilégio para um local user em um PDB específico:

SQL> ALTER SESSION SET CONTAINER=HIPOFISE1;
 
Session altered.
 
SQL> GRANT UNLIMITED TABLESPACE TO LOCALUSER;
 
Grant succeeded.
 
SQL> col grantee format a18
SQL> SELECT GRANTEE, PRIVILEGE, COMMON, CON_ID FROM CDB_SYS_PRIVS WHERE GRANTEE = 'LOCALUSER';
 
GRANTEE            PRIVILEGE                      COM     CON_ID
------------------ ------------------------------ --- ----------
LOCALUSER          UNLIMITED TABLESPACE           NO           3
LOCALUSER          CREATE SESSION                 NO           3

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.

Leave a Comment

Your email address will not be published.