Profile : ~하면 안된다.
Privilege : ~해도 좋다.
포스팅의 목적
어떻게 profile을 해당 유저에 설정가능, 어떤 profile이 유저에게 걸려있는가?
profile을 만들수 있고, 변경할 수 있다.
Profile : 여러 파라미터들을 묶어놓은 것 (role과 헷갈릴지도 모르지만, role은 권한묶음, profile은 제한사항관련 파라미터들의 묶음)
파라미터들에는 2가지 종류가 있습니다.
어떤 유저의 Password관련 설정과
유저가 사용할 수 있는 Resource 제한(Kernel)을 거는 것들
* 프로파일 특징
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에서 제공하는 함수를 사용할 수도 있다.) |
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를 할 수 있는 데이터
블록 수 |