Create USER

Uno User deve inizare con una lettera e non può contenere caratteri speciali.

Per creare un utente nel Container e che sia visibile nei suoi Pluggable database usare il prefisso C##.
Si chiama Common User come quelli di tipo amministrativo che sono  "sys" e "system".
Un Local user Ã¨ invece è un utente creato all'interno di un pdb  ed uno stesso local user può essere creato in differenti pdb.



Colleghiamoci al conainer root:

SQL> conn /as sysdba

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL>  select username, common, con_id from CDB_USERS order by username;

USERNAME COM      CON_ID
---------- --- -----------------------------
SYS         YES              1
SYS         YES              3
HR            NO              3

L'utente SYS è comune al container e al pdb (con_id=3) mentre HR è un local user perché è definito solo nel pdb.

All'interno del Root Container non si può creare un local user ma solo un common user.

SQL> create user pippo identified by pippo;
create user pippo identified by pippo
            *
ERRORE alla riga 1:
ORA-65096: nome utente o ruolo comune non valido

Un Common User è definito da un prefisso che è visibile dai parametri del db.

SQL> show parameter common_user_prefix

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
common_user_prefix                   string      C##


SQL>  create user c##pippo identified by pippo CONTAINER=ALL;

Container=ALL è opzionale.


SQL> select username, common, con_id from cdb_users where username ='C##PIPPO';

USERNAME   COM     CON_ID
---------- --- ---------------------------
C##PIPPO   YES          1
C##PIPPO   YES          3


Occorre fornire le grant  all'utente creato 

SQL> grant create session to c##pippo;    

Con queste grant si connette solo al root container:

[oracle@test ~]$ sqlplus c##pippo/pippo@test.com:1521/orcl.com

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> show user
USER is "C##PIPPO"


[oracle@test ~]$ sqlplus c##pippo/pippo@test.com:1521/orclpdb.com

ERROR:
ORA-01045: user C##PIPPO lacks CREATE SESSION privilege; logon denied

Occore fornire la grant con l'opzione container all.

SQL> grant create session to c##pippo contianer=all;

[oracle@test ~]$ sqlplus c##pippo/pippo@test.com:1521/orclpdb.com
...
SQL> show user
USER is "C##PIPPO"

SQL> show con_name
CON_NAME
------------------------------
ORCLPDB


**********************************************************************************

Anche per i RUOLI creati a livello di container occorre utilizzare il prefisso c## altrimenti si ha l'errore.
Non esitono local role nel Root Container.

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> create role test_role;

create role test_role
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

SQL> create role c##test_role;

Assegnamo alcuni priviligei di sitema al ruolo creato, e poi assegniamo il ruolo ad un Common User.

SQL> grant create session, create table to c##test_role container=all;

SQL> create user c##bat identified by bat;

SQL> grant c##test_role to c##bat container=all;

SQL> conn c##bat/bat@test.com:1521/orcl.com

SQL> show user
USER is "C##BAT"

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> conn c##bat/bat@test.com:1521/orclpdb.com

SQL> show user
USER is "C##BAT"

SQL> show con_name
CON_NAME
------------------------------
ORCLPDB

Se ad un Common User si danno le grant di "create session" all'interno di un pdb, non sarà possibile collegarsi al Root Container con questo utente.

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> create user c##rob identified by rob;

User created.

SQL> alter session set container=PDB2;

Session altered.

SQL> grant c##test_role to c##rob; 

Grant succeeded.

Facciamo una prova di connessione:

SQL> conn c##rob/rob@test.com:1521/orcl.com
ERROR:
ORA-01045: user C##ROB lacks CREATE SESSION privilege; logon denied

SQL> conn c##rob/rob@test.com:1521/orclpdb.com
ERROR:
ORA-01045: user C##ROB lacks CREATE SESSION privilege; logon denied

SQL> conn c##rob/rob@test.com:1521/pdb2.com
Connected.




Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database