Oracle CDB 계정 생성

TEST DB : ORACLE 21C 
PDB  LIST : PDB1, PDB3 

 [1] 계정 생성 시도  
 : CDB에서는 일반적인 문자열로 계정이 생성되지 않습니다. 

  CREATE USER PDB_ADMIN IDENTIFIED BY 1111;
  * Error : ORA-65096 INVALID COMMON USER OR ROLE NAME



[2] 계정 생성 시도 ( C## = COMMON USER )
  : CDB에서 C## prefix로 계정 생성은 됩니다. 하지만, CDB와 모든 PDB에 생성이 됩니다. 
    모든 DB에 생성되고  눈에 띄므로 특수 or 관리자 계정 용도가 적합합니다.

CREATE USER C##PDB_ADMIN IDENTIFIED BY 1111;
GRANT CREATE SESSION TO C##PDB_ADMIN;



[3] Container 변경해가면서 계정 확인 
 : 모든 cdb, pdb에 계정이 존재함을 알수 있습니다. 

ALTER SESSION SET container=CDB$ROOT;
SELECT * FROM DBA_USERS WHERE USERNAME = 'C##PDB_ADMIN';

ALTER SESSION SET container=PDB1;
SELECT * FROM DBA_USERS WHERE USERNAME = 'C##PDB_ADMIN';

ALTER SESSION SET container=PDB3;
SELECT * FROM DBA_USERS WHERE USERNAME = 'C##PDB_ADMIN';



[4] 권한 확인
 : 계정은 모든 CDB, PDB에 만들어지나, 권한은 각 DB에서 별도 부여되고 있습니다.
   테스트상 위 [2]번에서 CDB의 C##PDB_ADMIN에게 "CREATE SESSION" SYSTEM 권한을 부여하였습니다.
   그러므로 PDB1, PDB3 접속하여 C##PDB_ADMIN에 부여된 권한확인 해보면 0건임을 알 수 있습니다.

ALTER SESSION SET container=CDB$ROOT; -- CDB
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'C##PDB_ADMIN';

ALTER SESSION SET container=PDB1;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'C##PDB_ADMIN';

ALTER SESSION SET container=PDB3;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'C##PDB_ADMIN';



[5] 권한 일괄 부여 
  : 권한을 부여하기 위해 번거롭게 모든 PDB에 접속해서 부여하기는 힘든일입니다.
    아래와 같이 CDB에서  CONTAINSER = ALL 처리를 하면 일괄 부여됩니다. 
    부여 후  위 [4] 확인시 권한이 정상 부여됨을 알수 있습니다.

GRANT CREATE SESSION TO C##PDB_ADMIN CONTAINER=ALL;



[6] 계정 삭제 
 : PDB에서 삭제를 하면 아래 ORA-65040 에러가 발생합니다.
   CDB에서만 삭제가능하며, 삭제시 CDB와 모든 PDB에서 계정은 삭제되므로 주의해야합니다.

DROP USER C##PDB_ADMIN;
CDB에서 DROP 후, 위 [3] 번 계정 조회 재확인
* Error : ORA-65040 operation not allowed from within a pluggable database



[ 참고 ]
 1.  c## 계정 을 꼭 쓸필요는 없습니다. 
    신규 PDB 생성시 아래와 같이 관리자 계정명을 임의로 지정하여 사용할 수 있습니다.

    create pluggable database pdb3
    admin user pdb_admin identified by 1111;


2. Common User의 특징
  - 컨테이너 
    : Common User는 CONTAINER=ALL 옵션을 사용하여 생성됩니다. 이는 CDB 및 모든 PDB에서 유효함을 의미합니다.
  - 관리
   : 중앙에서 관리되며, 한 번의 생성 및 관리로 모든 PDB에서 동일하게 사용할 수 있습니다. 
     Common User는 데이터베이스 관리자가 여러 PDB를 관리할 때 효율성을 높이는 데 유용합니다.

3. Common User와 Local User의 차이점
  - Common User
     : CDB와 모든 PDB에 걸쳐 존재하며, C## 또는 c## 접두사를 사용하여 생성됩니다. Common User는 CDB의 중앙
       관리 계정으로, 모든 PDB에서 동일한 권한을 가질 수 있습니다.
  - Local User
    : 특정 PDB에서만 존재하며, 해당 PDB 내에서만 유효합니다. C## 접두사를 사용하지 않고 생성됩니다.

'ORACLE > MULTITENENT' 카테고리의 다른 글

CDB에서 모든 PDB 정보 조회  (0) 2024.06.18