Oracle/Admin

2012.01.27 Admin 8일차(2) (Profiles) ; password, resource관련파라미터

에몽이ㅋ 2012. 1. 27. 23:41
용어정리
Profile : ~하면 안된다.
Privilege : ~해도 좋다.

포스팅의 목적
어떻게 profile을 해당 유저에 설정가능, 어떤 profile이 유저에게 걸려있는가? 
profile을 만들수 있고, 변경할 수 있다.

Profile : 여러 파라미터들을 묶어놓은 것 (role과 헷갈릴지도 모르지만, role은 권한묶음, profile은 제한사항관련 파라미터들의 묶음)
파라미터들에는 2가지 종류가 있습니다.
어떤 유저의 Password관련 설정
유저가 사용할 수 있는 Resource 제한(Kernel)을 거는 것들


* 프로파일 특징
  - 프로파일 지정시 현재의 세션에는 영향을 주지 않습니다.
  - 프로파일은 롤이나 다른 프로파일에는 지정할 수 없고 사용자에게만 지정 할 수 있습니다.
  - 사용자를 생성할 때 프로파일을 지정하지 않으면 자동적으로 DEFAULT Profile이 설정 됩니다.

 
* Profile 관련 딕셔너리
DBA_USERS, DBA_PROFILES


*DBA_USERS사용하기
DBA_USERS구조
SQL> desc dba_users
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- --------------------------------------------
 USERNAME                                                          NOT NULL VARCHAR2(30)
 USER_ID                                                           NOT NULL NUMBER
 PASSWORD                                                                   VARCHAR2(30)
 ACCOUNT_STATUS                                                    NOT NULL VARCHAR2(32)
 LOCK_DATE                                                                  DATE
 EXPIRY_DATE                                                                DATE
 DEFAULT_TABLESPACE                                                NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE                                              NOT NULL VARCHAR2(30)
 CREATED                                                           NOT NULL DATE
 PROFILE                                                           NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP                                                VARCHAR2(30)
 EXTERNAL_NAME                                                              VARCHAR2(4000)
 
DBA_USERS 사용예시(어떤 profile이 설정되어있는지)
  1  select USERNAME, PROFILE, ACCOUNT_STATUS
  2  from dba_users
  3* where username='SCOTT'
SQL> /

USERNAME                       PROFILE                        ACCOUNT_STATUS
------------------------------ ------------------------------ --------------------------------
SCOTT                          DEFAULT                        OPEN
 

*DBA_PROFILES 구조 및 어떤 파라미터값이 할당되어있는지 살펴보기
 SQL> desc dba_profiles
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- ---------------------------------- ----------
 PROFILE                                                           NOT NULL VARCHAR2(30)
 RESOURCE_NAME                                                     NOT NULL VARCHAR2(32)
 RESOURCE_TYPE                                                              VARCHAR2(8)
 LIMIT                                                                      VARCHAR2(40)

DEFAULT profile에는 어떤 파라미터값이 설정되어있는지 보기
  1  select * from dba_profiles
  2* where profile='DEFAULT'
SQL> /

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT
------------------------------ -------------------------------- -------- ------------------------------------- ---
DEFAULT                        COMPOSITE_LIMIT                  KERNEL   UNLIMITED
DEFAULT                        SESSIONS_PER_USER                KERNEL   UNLIMITED
DEFAULT                        CPU_PER_SESSION                  KERNEL   UNLIMITED
DEFAULT                        CPU_PER_CALL                     KERNEL   UNLIMITED
DEFAULT                        LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED
DEFAULT                        LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED
DEFAULT                        IDLE_TIME                        KERNEL   UNLIMITED
DEFAULT                        CONNECT_TIME                     KERNEL   UNLIMITED
DEFAULT                        PRIVATE_SGA                      KERNEL   UNLIMITED
DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 3
DEFAULT                        PASSWORD_LIFE_TIME               PASSWORD 60
DEFAULT                        PASSWORD_REUSE_TIME              PASSWORD 1800
DEFAULT                        PASSWORD_REUSE_MAX               PASSWORD UNLIMITED
DEFAULT                        PASSWORD_VERIFY_FUNCTION         PASSWORD VERIFY_FUNCTION
DEFAULT                        PASSWORD_LOCK_TIME               PASSWORD .0006
DEFAULT                        PASSWORD_GRACE_TIME              PASSWORD 10

16 rows selected.
(KERNEL은 resource관련 파라미터들, PASSWORD는 비밀번호관련 파라미터들)


* Profile을 유저에게 할당하기
ALTER USER user_name PROFILE profile_name;


* 프로파일지우기
DROP PROFILE profile_name [CASCADE];
* CASCADE 옵션없이 지울때는 해당 프로파일이 어떤 유저에게 할당되어있으면 지워지지 않고, 
 CASCADE 옵션설정하고 실행하게 되면 해당 프로파일이 유저에게 할당되어있어도 삭제합니다.
(프로파일이 지워진 유저는 DEFAULT 프로파일로 할당이 됩니다. )


* 프로파일만들기
CREATE PROFILE profile_name LIMIT
   PARAMETERS  NUMBER;

예제)
CREATE PROFILE koo_profile LIMIT
PASSWORD_LIFE_TIME 3
FAILED_LOGIN_ATTEMPTS 2
PASSWORD_REUSE_TIME 6
PASSWORD_VERIFY_FUNCTION verify_function
SESSIONS_PER_USER 2
IDLE_TIME 120;
 
예제설명 : koo_profile 프로파일을 할당받은 유저는
비밀번호 변경 후 3일 후면 해당 비밀번호는 만료되어서 다시 바꾸어주어야 하고, 비밀번호 2번실패 시 계정잠김,
비밀번호 변경 후 6일 후면 이전에 썻던 비밀번호가 사용가능하고, 비밀번호검증시 verify_function함수을 사용한다.
한 사용자로 동시접속할 수 있는 세션은 2개고, 아무작업도 하지 않은 채 120분이 지나면 자동으로 접속이 해제된다.
(관련 parameter들은 아래에서 자세히 살펴봅니다.)

*프로파일변경하기
ALTER PROFILE profile_name LIMIT
 PARAMETERS NUMBER[DEFAULT];

예제)
ALTER PROFILE koo_profile LIMIT
PASSWORD_REUSE_TIME 3
PASSWORD_VERIFY_FUNCTION DEFAULT; 
예제설명 :
비밀번호 재사용시간을 3일로 지정, 비밀번호검증을 default로 지정



Password관련설정 Profile
*시작하기 전에 : CREATE DATABASE로 수동 DB를 생성했다면, utlpwdmg.sql 을 실행시켜야 합니다.
( SQL> @?/rdbms/admin/utlpwdmg ) 

* Profile password 관련 PARAMETERS

비밀번호 계정잠금

FAILED_LOGIN_ATTEMPTS

3으로 지정된다면, 비밀번호 입력 3번실패시 해당 계정이 잠김

(SYSDBA권한을 가진 유저가 해제가능)

PASSWORD_LOCK_TIME

위 문제로 계정이 잠겼을 때, 몇일동안 계정을 잠글지 정하는 파라미터 (Default : UNLIMITED)

비밀번호 만료

PASSWORD_LIFE_TIME

해당 비밀번호를 몇일동안 사용할 수 있을지 정하는 파라미터

비밀번호 내역(이력)

PASSWORD_REUSE_TIME

5로 지정되면, 비밀번호를 바꾸고 5일이후에나 이전에 썻던 비밀번호를 사용가능

PASSWORD_REUSE_MAX

동일한 암호를 쓸 수 있는 최대 횟수

비밀번호 검증

PASSWORD_VERIFY_FUNCTION

암호를 복잡하게 만드는 함수

(직접 만들 수도 있고 ORACLE에서 제공하는 함수를 사용할 수도 있다.)
(아래 예시는 oracle에서 제공하는 함수 사용)




Resource 관련설정 Profile 
*변경하기 전에
RESOURCE_LIMIT 값이 TRUE로 되어야만, resource관련 파라미터값들이 작동을 합니다.(FALSE면 지정을 해도 적용이 안됨)
---> ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;
 

* Profile Resource 관련 PARAMETERS 

RESOURCE 관련 파라미터 (항상 예기치 않은 상황이 있으므로 쓸 때 항상 조심)

CPU_PER_SESSION

CPU TIME허용시간(단위 : 1/100)

500으로 설정되면, 어떤 쿼리가 5초이상연산을 하게 되면 강제적으로 KILL

(무한루프방지도 가능하지만, 정상적인 쿼리도 죽일 수 있으므로 항상 예외상황을 생각하세요)

SESSIONS_PER_USER

같은 유저에 몇 명이 접속할 수 있는지 정하는 파라미터

CONNECT_TIME

하루당 서버에 접속할 수 있는 시간

(60로 지정되면, 하루에 연속으로 1시간접속하던지, 10분씩 6번 접속하던지, 하루에 60분밖에 접속할 수 없음)

IDLE_TIME

멍떄리고 있을 수 있는 시간

(120으로 설정 시 작업을 아무것도 안하는 시간이 120분이 넘어가면 자동으로 접속해제)

LOGICAL_READS_PER_SESSION

데이터 블록 수 (물리적:디스크로부터,논리적:메모리로부터 읽은) : LOGICAL_READS_PER_SESSION은 메모리와 디스크 모두 에게서 읽는 총 횟수를 제한 합니다.

PRIVATE_SGA

바이트 단위로 측정한 SGA 내의 전용(private) 공간(MTS) : PRIVATE_SGA는 다중 스레드 서버(MTS) 구성 일 때만 적용 됩니다.

CPU_PER_CALL

하나의 Call CPU 사용시간

LOGICAL_READS_PER_CALL

Call I/O를 할 수 있는 데이터 블록 수