오라클 데이터베이스 관리자 기초- (11)암호 보안 및 자원 관리

2020. 1. 16. 16:23Security/oracle database

* 프로 파일

- 암호 및 자원 제한을 명명한 집합

- CREATE USER, ALTER USER 명령을 사용해서 사용자에게 할당

- 활성화 또는 비활성화 가능

- DEFAULT 프로파일과 연관 가능

 

*암호 관리

계정 잠금(account locking)

- 이 정책의 적용을 받는 사람들은 일정 횟수 이상 패스워드를 잘못 입력할시 lock 걸리게 설정이 가능

- password_lock_time은 일단위로 적용되며  1/24와 같은 방식으로도 설정 가능

- 그러나 실제로 사용할 일은 없다.

 

암호 기록(password history)

- password_reuse_time : 암호 재사용 불가 기간

- password_reuse_max : 암호 재사용 최대 횟수

 

암호 확인(password verification)

- 암호의 복잡성 확인

- 오라클에서 verify function이라는 함수 제공. 그러나 최근에는 폐기.

 

암호 만기일 기능 및 암호 만기

- password_life_time : 패스워드를 사용할 수 있는 기간. 

- password_grace_time : 암호 만기 후 변경까지의 유예 기간

- 암호의 사용 기간은 두 매개변수의 합한 기간

 

사용자 암호 제공 암호 함수

-return되는 boolean값이 1이면 사용 가능하고 0이면 사용이 불가능

 

프로파일 생성(암호 설정)

프로파일 변경(암호 설정)

- ALTER PROFILE을 명령을 통해 암호 제한을 변경할 수 있음

- 실제로 실무에서 사용하는 일은 없음.

 

프로파일 삭제(암호 설정)

- default profile은 삭제가 불가능

- cascade 명령을 사용하지 않으면 사용중인 유저가 있을 경우 삭제가 불가능하다. 

- cascade 명령을 통해 할당한 사용자로부터 프로파일을 취소. 즉 사용중인 유저가 있어도 삭제가 가능하며 사용중인 유저의 프로파일은 default 프로파일로 변경된다.

 

리소스(자원) 관리

- call(호출) 레벨 : 1회 문장 수행시 사용할 수 있는 리소스에 대한 설정

- session 레벨 : 1회 접속시 사용할 수 있는 리소스에 대한 설정

 

자원 제한 활성화

- 초기 설정이 이미 true로 완성되어 있다.

- false로 설정 되어있으면 명령이 적용되지 않기때문에 true인지 false인지를 사전에 확인한다.

 

 

세션 레벨에서 자원 제한 설정

- CPU_PER_CALL : CPU 시간(1/100초)

- SESSIONS_PER_USER : 동시 세션 허용 수

- CONNECT_TIME : 접속 유지 시간. 설정된 시간이 지나면 연결이 끊긴다.

- IDLE_TIME : 접속 후 아무것도 안하는 시간

- LOGICAL_READS_PERSESSION : 물리적 및 논리적으로 읽을 수 있는 데이터 블록 수

- PRIVATE_SGA :  client-server통신이 1대1이 아닌 1대 다 통신이 가능하게 만들어준다. 

 

호출 레벨에서 자원 제한 설정

- CPU_PER_CALL : CPU 시간(1/100초)

- LOGICAL_READS_PER_CALL : 한 문장당 읽을 수 있는 데이터 블록 수

 

-LOGICAL_READ_PER_SESSION, LOGICAL_READ_PER_CALL를 이용해 full scan시에도 블록을 전부 읽지 않게 한다. 이 매개변수를 설정을 사용하여 쓸모없는 블록을 읽는 수행을 막는다.

 

암호 및 자원 제한 정보가 저장되어 있는 곳

- DBA_USERS 

- DBA_PROFILES

 

[실습]Profile 조회

<사용 명령어> 
SELECT DISTINCT profile FROM DBA_PROFILES;

- profile의 목록만 확인하고 싶을때는 distinct를 이용

 

SELECT * FROM DBA_PROFILES
ORDER BY RESOUECE_TYPE;
- 각 Profile에 정의된 설정 값을 확인한다.

 

SELECT username, profile FROM DBA_USERS;
- 각 user에게 할당된 profile을 조회.

DESC dba_profiles;

// profile 목록이 저장된 구조를 확인.

 

SELECT DISTINCT profile FROM dba_profiles;

// profile의 목록 확인

SELECT * FROM dba_profiles
WHERE profile = 'DEFAULT'
ORDER BY resource_type;

// 각 profile에 정의된 제한 사항을 확인.

SELECT username, profile FROM dba_users;

// 각 user에게 할당된 profile을 조회

 

[실습]Profile 생성과 제한 설정

Profile 설정은 password와 리소스 두 부분으로 나누어지는데 이중에 리소스 관련 설정은 resource_limit가 반드시 tr
ue로 정의되었을때 유효. 실습을 통해 profile을 생성하고 제한을 설정해 보자.

<사용 명령어>

CREATE PROFILE  LIMITED
COMPOSITE_LIMIT [<설정값> | UNLIMITED | DEFAULT]
SESSIONS_PER_USER [<설정값> | UNLIMITED | DEFAULT]
PRIVATE_SGA [<설정값> | UNLIMITED | DEFAULT]
CONNECT_TIME [<설정값> | UNLIMITED | DEFAULT]
IDLE_TIME [<설정값> | UNLIMITED | DEFAULT]
LOGICAL_READS_PER_CALL [<설정값> | UNLIMITED | DEFAULT]
LOGICAL_READS_PER_SESSION [<설정값> | UNLIMITED | DEFAULT]
CPU_PER_CALL [<설정값> | UNLIMITED | DEFAULT]
CPU_PER_SESSION [<설정값> | UNLIMITED | DEFAULT]
PASSWORD_VERIFY_FUNCTION [<설정값> | NULL | DEFAULT]
PASSWORD_REUSE_MAX [<설정값> | UNLIMITED | DEFAULT]
PASSWORD_REUSE_TIME [<설정값> | UNLIMITED | DEFAULT]
PASSWORD_LIFE_TIME [<설정값> | UNLIMITED | DEFAULT]
FAILED_LOGIN_ATTEMPTS [<설정값> | UNLIMITED | DEFAULT]
PASSWORD_LOCK_TIME [<설정값> | UNLIMITED | DEFAULT]
PASSWORD_GRACE_TIME [<설정값> | UNLIMITED | DEFAULT];

- Profile을 생성한다.
- UNLIMITED : 제한하지 않는다.
- DEFAULT : DEFAULT profile과 동일한 값을 가진다.
- COMPOSITE_LIMIT : CONNECT_TIME, PRIVATE_SGA, CPU_PER_SESSION, READ_PER_SESSION 등의
값을 통합해서 제한한다.
- SESSIONS_PER_USER : 계정당 접속 가능한 세션 숫자.
- PRIVATE_SGA : Shared server환경에서 SGA에 사용가능한 SP 전용 메모리 크기 (MB)
- CONNECT_TIME : 접속 유효 시간 (분)
- IDLE_TIME : 비활성 접속 한계 (분)
- LOGICAL_READS_PER_CALL : 한 문장에서 읽기 가능한 block 개수
- LOGICAL_READS_PER_SESSION : 한 session에서 읽기 가능한 block 개수
- CPU_PER_CALL : 한 문장에서 사용 가능한 CPU 시간 (1/100 초)
- CPU_PER_SESSION : 한 session에서 사용 가능한 CPU 시간 (1/100 초)
- PASSWORD_VERIFY_FUNCTION : Password 복잡성을 확인하는 함수
- PASSWORD_REUSE_MAX : Password 재사용까지 변경 횟수
- PASSWORD_REUSE_TIME : Password 재사용까지 제한 시간
- PASSWORD_LIFE_TIME : Password 유효 기간
- FAILED_LOGIN_ATTEMPTS : Password 오류 허용 횟수
- PASSWORD_LOCK_TIME : Password 오류에 의해 lock 유지 시간 (일)
- PASSWORD_GRACE_TIME : Password 만료이후 암호 변경까지 유예 기간
- Profile에 대한 ALTER 문장은 CREATE 문장과 동일하다.

SHOW PARAMETER resource_limit

// false일 경우 무시 됨. TRUE인것을 반드시 확인

 

CREATE PROFILE insa LIMIT 
SESSIONS_PER_USER 1
IDLE_TIME 5
CONNECT_TIME 10;

// insa profile을 생성. (지정하지 않은 항목은 default로 정의.)

SESSIONS_PER_USER가 1이기 때문에 특정 user가 접속하면 아무도 접속하지 못 함.

 

SELECT * FROM dba_profiles
WHERE PROFILE = 'INSA'
ORDER BY 3;

// 직접 지정해주지 않은 설정은 default profile과 동일한 제한을 받음.

ALTER PROFILE insa LIMIT  
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1;

// 제한 항목의 일부를 수정한다. (문법은 CREATE 문장과 동일하다.)

 

SELECT * FROM dba_profiles
WHERE PROFILE = 'INSA'
ORDER BY 3;

// 변경된 FAILED_LOGIN_ATTEMPTS, PASSWORD_LOCK_TIME 설정을 확인

 

[실습]Profile 할당과 적용

<사용 명령어> 
ALTER USER 
PROFILE ;
- 사용자에게 profile을 할당한다.
- CREATE USER 명령을 통해 할당하는 것도 가능하다.
- User에 profile을 지정하지 않으면 defaule profile에 적용을 받는다.

CREATE USER emp 
IDENTIFIED BY emp 
DEFAULT TABLESPACE usr
TEMPORARY TABLESPACE tmp
QUOTA UNLIMITED ON usr;

 

GRANT connect, resource TO emp;

// emp계정이 이미 존재하는 경우 생략

 

SELECT username, profile
FROM dba_users
WHERE username = 'EMP';

// user의 profile 확인

 

ALTER USER emp  
PROFILE insa;

// insa profile을 할당

 

SELECT username, profile
FROM dba_users
WHERE username = 'EMP';

// insa가 할당되어 변경된 것을 확인

세션창 2개를 킨 후 둘 다 접속을 시도하면 하나는 1로 제한되어있어 접속이 불가능하다.

CONN emp/in

CONN emp/in

CONN emp/in

CONN emp/emp

// 비밀번호를 3번 틀린 후에는 정확한 비밀번호를 쳐도 접속이 되지 않는다.

CONN / as sysdba

// 사용자 계정 접속

 

SELECT username, account_status FROM dba_users
WHERE username = 'EMP';

// 하루 지나면 lock이 풀림.  account_status가 timed으로 되어있으면 잠겨있는 상태이다. 

 

ALTER USER emp
ACCOUNT unlock;

SELECT username, account_status FROM dba_users 
WHERE username = 'EMP';

// emp 계정을 락을 풀어준 후에 다시 account_status를 확인해보면 open으로 변경된 것을 확인할 수 있다.

 

CONN emp/emp

// 문제없이 접속 되는 것을 확인.