데이터베이스 연구실.log

공통 사용자와 로컬 사용자

멀티테넌트에서 모든 컨테이너에 있는 공통 사용자와 한 PDB에만 있는 로컬 사용자의 차이, 이름 규칙(C##), 생성과 권한 부여 범위

공통 사용자로컬 사용자C##COMMON_USER_PREFIXCONTAINER=ALL

#핵심 요약

공통 사용자는 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

#공통 사용자 조회와 접두사 확인

SQL*Plus (SYSDBA)조회만 함
SELECT username, common, oracle_maintained
  FROM dba_users
 WHERE common = 'YES';

SHOW PARAMETER common_user_prefix

결과 해석:

ORACLE_MAINTAINED가 Y인 계정은 Oracle이 만든 계정으로 보이나 설명은 기재 없음

#공통 사용자 생성과 권한

SQL*Plus (SYSDBA, CDB$ROOT)객체 또는 설정을 변경함
CREATE USER c##<COMMON_USER> IDENTIFIED BY <PASSWORD> CONTAINER=ALL;
SQL*Plus (SYSDBA, CDB$ROOT)객체 또는 설정을 변경함
GRANT create session, create table TO c##scott CONTAINER=ALL;

결과 해석:

실습 기록에는 생성 대상과 철자가 다른 c##<COMMON_USER_VARIANT>도 있어 동일 사용자인지 확인 불가

#로컬 사용자 생성

SQL*Plus (SYSDBA, 대상 PDB)객체 또는 설정을 변경함
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 없이 공통 사용자에게 권한을 주면 어떤 범위가 되는지는 기재 없음

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기