공통 사용자와 로컬 사용자
멀티테넌트에서 모든 컨테이너에 있는 공통 사용자와 한 PDB에만 있는 로컬 사용자의 차이, 이름 규칙(C##), 생성과 권한 부여 범위
#핵심 요약
공통 사용자는 CDB$ROOT에서 CONTAINER=ALL로 만들고 모든 컨테이너에 존재함
이름은 COMMON_USER_PREFIX로 시작해야 하며 CDB 루트의 기본값은 C##임
로컬 사용자는 한 PDB 안에서 만들고 그 PDB에만 존재함
이름은 C##으로 시작할 수 없음
공통 사용자에게 권한을 줄 때 CONTAINER=ALL을 붙이면 모든 컨테이너에서 쓸 수 있는 권한이 됨
#개념과 동작 원리
| 구분 | 공통 사용자 | 로컬 사용자 |
|---|---|---|
| 만드는 곳 | CDB$ROOT, CONTAINER=ALL |
해당 PDB |
| 존재 범위 | 모든 컨테이너 | 그 PDB만 |
| 이름 규칙 | COMMON_USER_PREFIX(CDB 루트 기본값 C##)로 시작 |
C##으로 시작할 수 없음 |
DBA_USERS.COMMON |
YES | NO |
COMMON_USER_PREFIX는 공통 Role과 Profile 이름에도 적용되고, ALTER SYSTEM으로 바꿀 수 없음
#필수 명령어 또는 SQL
#공통 사용자 조회와 접두사 확인
SELECT username, common, oracle_maintained
FROM dba_users
WHERE common = 'YES';
SHOW PARAMETER common_user_prefix결과 해석:
ORACLE_MAINTAINED가 Y인 계정은 Oracle이 만든 계정으로 보이나 설명은 기재 없음
#공통 사용자 생성과 권한
CREATE USER c##<COMMON_USER> IDENTIFIED BY <PASSWORD> CONTAINER=ALL;GRANT create session, create table TO c##scott CONTAINER=ALL;결과 해석:
실습 기록에는 생성 대상과 철자가 다른 c##<COMMON_USER_VARIANT>도 있어 동일 사용자인지 확인 불가
#로컬 사용자 생성
CREATE USER <LOCAL_USER>
IDENTIFIED BY <PASSWORD>
DEFAULT TABLESPACE users
QUOTA 5M ON users;
GRANT create session TO <LOCAL_USER>;결과 해석:
QUOTA 5M ON users로 USERS 테이블스페이스를 5MB까지 쓰게 함
Quota는 Quota와 공간 사용 권한에 있음
#구문과 옵션 설명
| 구문 | 의미 | 바꿀 입력값 |
|---|---|---|
CREATE USER c##<이름>... CONTAINER=ALL |
공통 사용자 생성 | 이름(접두사 포함), 비밀번호 |
GRANT ... TO <사용자> CONTAINER=ALL |
모든 컨테이너에 권한 부여 | 권한, 사용자 |
DEFAULT TABLESPACE, QUOTA ... ON |
기본 테이블스페이스와 사용 한도 | 테이블스페이스, 크기 |
#사용 조건과 주의사항
CONTAINER=ALL 없이 공통 사용자에게 권한을 주면 어떤 범위가 되는지는 기재 없음