사용자, 스키마, 인증
비밀번호, OS와 패스워드 파일 인증의 차이, 관리자 역할과 스키마 전용 계정
#핵심 요약
일반 사용자는 주로 비밀번호 인증을, 관리자는 OS 인증이나 패스워드 파일 인증을 씀
OS 인증은 OS의 dba 그룹 소속으로 sqlplus / as sysdba처럼 비밀번호 없이 관리자로 접속하는 방식임
패스워드 파일은 원격 SYSDBA 같은 관리자 인증에 씀
사용 여부는 REMOTE_LOGIN_PASSWORDFILE이 정하며 기본값은 EXCLUSIVE임
CREATE USER ... NO AUTHENTICATION으로 로그인할 수 없고 객체만 소유하는 스키마 전용 계정을 만듦
#개념과 동작 원리
#인증 방식
| 방식 | 설명 |
|---|---|
| 비밀번호 인증 | 사용자명과 비밀번호로 인증 |
| OS 인증 | OS 그룹 권한으로 관리자 인증 |
| 패스워드 파일 인증 | 원격 SYSDBA 등 관리자 인증 |
| 강력한 인증 | Kerberos, SSL, 디렉터리 인증 등 |
#REMOTE_LOGIN_PASSWORDFILE
기본값은 EXCLUSIVE이고 ALTER SYSTEM으로 바꿀 수 없음(Modifiable: No)
| 값 | 의미 |
|---|---|
| EXCLUSIVE | 같은 DB의 인스턴스(또는 같은 클러스터의 ASM 인스턴스)가 쓰는 패스워드 파일 SYS와 SYS 아닌 사용자를 담을 수 있음 |
| SHARED | 여러 DB가 패스워드 파일을 함께 씀 파일 수정이 막혀 비밀번호 변경이나 관리자 권한 부여, 회수가 ORA-01999로 실패할 수 있음 |
| NONE | 패스워드 파일을 무시 관리자는 OS 인증으로만 접속 |
EXCLUSIVE나 SHARED라도 패스워드 파일이 없으면 NONE과 같이 동작함
NONE에서 EXCLUSIVE나 SHARED로 바꿀 때는 패스워드 파일과 데이터 사전의 비밀번호를 맞춰야 함
#관리자 계정
| 계정 | 역할 |
|---|---|
| SYS | 슈퍼유저 데이터 딕셔너리와 AWR을 소유하며 인스턴스 시작과 종료 등에 사용 |
| SYSTEM | 그 외의 관리용 테이블과 뷰를 소유 |
| SYSBACKUP | RMAN 백업, 복구 작업 지원 |
| SYSDG | Data Guard 관리 작업 지원 |
| SYSKM | TDE 키와 Wallet, Keystore 관리 작업 지원 |
| SYSRAC | RAC 관리 작업 지원 |
| SYSMAN | Enterprise Manager 관리 작업 지원 |
| DBSNMP | Enterprise Manager의 Management Agent가 DB를 모니터링, 관리할 때 사용 |
#필수 명령어 또는 SQL
#패스워드 파일과 인증 방식 확인
SELECT * FROM v$pwfile_users;
SHOW PARAMETER remote_login_passwordfile
SELECT SYS_CONTEXT('USERENV', 'AUTHENTICATION_METHOD') FROM dual;결과 해석:
수업 자료에 적힌 Linux의 패스워드 파일 위치는 $ORACLE_HOME/dbs/orapw<ORACLE_SID>임V$PWFILE_USERS는 패스워드 파일에 등록된 관리자 계정을 보여 줌
#관리자 인증 막기
-- 파라미터: 원격 SYSDBA 패스워드 파일 인증 차단
REMOTE_LOGIN_PASSWORDFILE=NONE
-- $ORACLE_HOME/network/admin/sqlnet.ora: 로컬 OS 인증 차단
SQLNET.AUTHENTICATION_SERVICES=(NONE)결과 해석:
설명: 첫 줄은 원격 SYSDBA 패스워드 파일 인증을, 둘째 줄은 sqlplus / as sysdba를 막음REMOTE_LOGIN_PASSWORDFILE은 정적 파라미터라 SPFILE에 바꾸고 재기동해야 함
둘 다 막으면 관리자 접속 경로가 없어질 수 있으므로 실습 환경에서만 시험함
#OS 인증 일반 사용자
SHOW PARAMETER os_authent_prefixCREATE USER ops$king IDENTIFIED EXTERNALLY;
GRANT CREATE SESSION TO ops$king;sqlplus /결과 해석:
OS_AUTHENT_PREFIX의 기본값은 OPS$이며, Oracle은 이 접두사를 OS 계정 이름 앞에 붙여 DB 사용자와 비교함(Oracle Database Reference 19c, OS_AUTHENT_PREFIX)
그래서 OS 계정 king은 DB 사용자 OPS$KING으로 접속함
#관리 권한 계정 사용 (SYSBACKUP, SYSDG)
ALTER USER sysbackup IDENTIFIED BY <PASSWORD> ACCOUNT UNLOCK;
GRANT sysbackup TO sysbackup;
GRANT sysbackup TO sysbackup CONTAINER=ALL;rman target '"sysbackup/<PASSWORD>@localhost:<PORT>/<SERVICE_NAME> as sysbackup"'
sqlplus sysdg/<PASSWORD>@//localhost:<PORT>/<SERVICE_NAME> as sysdg결과 해석:
실습에서는 RMAN 접속 뒤 report schema와 backup database를 실행했음backup database는 백업 파일을 만드는 작업임
#스키마 전용 계정
CREATE USER <USERNAME> NO AUTHENTICATION;
ALTER USER <USERNAME> IDENTIFIED BY <PASSWORD>;
ALTER USER <USERNAME> NO AUTHENTICATION;결과 해석:
순서대로 생성, 비밀번호를 줘서 로그인 가능하게 해제, 다시 스키마 전용으로 되돌리기임
#구문과 옵션 설명
| 구문 | 의미 | 바꿀 입력값 |
|---|---|---|
IDENTIFIED EXTERNALLY |
OS 인증 사용자 | OPS$ + OS 계정 이름 |
NO AUTHENTICATION |
로그인 불가, 객체 소유만 | 계정 이름 |
GRANT <관리 권한> TO <사용자> CONTAINER=ALL |
모든 컨테이너에 관리 권한 부여 | 권한, 사용자 |
SYS_CONTEXT('USERENV','AUTHENTICATION_METHOD') |
현재 세션의 인증 방식 |
#사용 조건과 주의사항
수업 자료는 보안 사고 예방을 위해 비밀번호를 정기적으로 바꾸고, 특수 문자($, _), 숫자, 대소문자를 섞으라고 권함
비밀번호를 잊으면 DB에서 알아낼 방법이 없고 ALTER USER ... IDENTIFIED BY로 새 비밀번호를 정하는 수밖에 없음
로그인 실패 잠금은 Role과 Profile에서 다룸
명령행에 비밀번호를 쓰면 셸 히스토리와 ps에 남음