오라클 DB - Profile, 암호관리

2022. 11. 22. 17:48데이터베이스

프로파일

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

 - CREATE USER 또는 ALTER USER 명령을 사용하여 사용자에게 할당함

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

 - DEFALUT 프로파일과 연관 가능

 

암호관리

 - 계정 잠금 : 사용자가 지정한 시도 횟수 내에 시스템에 로그인하지 못하면 계정을 자동으로 잠금 할 수 있습니다.

 - 암호 만기일 기능 및 암호 만기 : 암호에 실행주기가 있어 암호가 만료되면 바꾸어야 합니다.

 - 암호 기록 : 지정한 암호 변경 횟수동안 암호를 재사용하지 않았는지 확인하기 위해 새 암호를 검사합니다.

 - 암호 복잡성 확인 : 암호를 추측하여 시스템에 침입하려고 하는 침입자를 방지할 수 있을 만큼 암호가 

                                 복잡한지 확인하기 위해 암호의 복잡성을 검사합니다.

 

암호 관리 활성화

 - 프로파일을 사용하여 암호 관리를 설정하고 사용자에게 할당합니다.

 - CREATE USER 또는 ALTER USER명령을 사용하여 계정을 잠그거나 잠금을 해제하고 만료합니다.

 - 암호 제한은 항상 시행합니다.

 - 암호 관리를 활성화하려면 SYS 사용자로 utlpwdmg.sql 스크립트를 실행합니다.

 

암호 계정 잠금

 - FAILED_LOGIN_ATTEMPTS : 계정 잠금 전에 가능한 로그인 시도 실패 횟수

 - PASSWORD_LOCK_TIME : 지정된 로그인 시도 실패 횟수 이후에 계정이 잠기는 일 수

 

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

 - PASSWORD_LIFE_TIME : 암호를 변경해야 하는 최대 실행 주기

 - PASSWORD_GRACE_TIME : 암호 만기 후 처음 로그인할 때부터 시작되는 암호 변경을 위한 유예 기간

 

암호 기록

 - PASSWORD_REUSE_TIME : 주어진 일 수 동안 암호를 재사용할 수 없도록 지정

 - PASSWORD_REUSE_MAX : 암호를 재사용할 수 있는 최대 횟수

 

암호확인

 - PASSWORD_VERIFY_FUNCTION : 암호 할당 전에 암호 복잡성을 검사하는 PL/SQL 함수

 

사용자 제공 암호 함수

 - SYS 스키마에 작성되어야 하고 다음의 사양을 갖고 있어야 합니다.

 

  function_name(
  userid_parameter IN VARCHAR2(30),
  password_parameter IN VARCHAR2(30),
  old_password_parameter IN VARCHAR2(30))
  RETURN BOOLEAN

 

암호 확인 함수 VERIFY_FUNCTION

 - 최소 길이는 네 자입니다.

 - 암호는 사용자 이름과 동일하지 않아야 합니다.

 - 암호는 최소한 영문자 한 개,  숫자 한 개 및 특수 문자 한 개로 구성되어야 합니다.

 - 암호는 최소한 세 자가지 이전 암호와 달라야 합니다.

 

프로파일 생성 :  암호 설정

  CREATE PROFILE grace_5 LIMIT
    FAILED_LOGIN_ATTEMPTS 3
    PASSWORD_LOCK_TIME UNLIMITED
    PASSWORD_LIFE_TIME 30
    PASSWORD_REUSE_TIME 30
    PASSWORD_VERIFY_FUNCTION verify_function
    PASSWORD_GRACE_TIME 5;

 

프로파일 변경 : 암호 설정

 - ALTER PROFILE을 사용하여 암호 제한을 변경합니다.

     ALTER PROFILE default LIMIT
    FAILED_LOGIN_ATTEMPTS 3
    PASSWORD_LIFE_TIME 60 
    PASSWORD_GRACE_TIME 10;

 

프로파일 삭제 : 암호 설정

 - DROP PROFILE 명령을 사용하여 프로파일을 삭제합니다.

 - DEFAULT 프로파일은 삭제할 수 없습니다.

 - CASCADE는 할당한 사용자로부터 프로파일을 취소합니다.

    - DROP PROFILE developer_prof;

    - DROP PROFILE developer_prof CASCADE;

 

자원 관리

 - 자원 관리 제한은 세션 레벨, 호출 레벨 또는 두 레벨 모두에서 시행할 수 있습니다.

 - CREATE PROFILE 명령을 사용하여 프로파일에서 제한을 정의할 수 있습니다.

 - 다음을 사용하여 자원 제한을 활성화합니다.

   - RESOURCE_LIMIT 초기화 매개변수

   - ALTER SYSTEM 명령

 

자원 제한 활성화

 - 초기화 매개변수 RESOURCE_LIMIT을 TRUE로 설정

 - ALTER SYSTEM 명령으로 이 매개변수를 활성화하여 자원 제한 시행

   - ALTER SYSTEM SET RESOURCE_LIMIT=TRUE;

 

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

 - CPU_PER_SESSION : 1/100초 단위로 측정한 총 CPU 시간

 - SESSIONS_PER_USER : 각 사용자 이름에 허용되는 동시 세션 수

 - CONNECT_TIME : 분 단위로 측정한 연결 경과 시간

 - IDLE_TIME : 분 단위로 측정한 비활성 시간

 - LOGICAL_READS_PER_SESSION : 데이터 블록 수(물리적 및 논리적 읽기)

 - PRIVATE_SGA : 바이트 단위로 측정한 SGA의 전용 공간

 

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

 - CPU_PER_CALL : 1/100초 단위로 측정한 호출당 CPU 시간

 - LOGICAL_READS_PER_CALL : 호출당 읽을 수 있는 데이터 블록 수

 

프로파일 생성  : 자원 제한

  CREATE PROFILE developer_prof LIMIT
    SESSIONS_PER_USER 2 - 같은 계정으로 2명까지 접속 제한

    CPU_PER_SESSION 10000
    IDLE_TIME 60   - 1시간 동안 미사용시 접속 해제
    CONNECT_TIME 480;   - 8시간

 

오라클 실습과정

 

10 Profile 관리
==================================================================================
실습 10.1 Profile 조회 (필)
==================================================================================

 

사용 명령어

SQL> SELECT DISTINCT profile FROM DBA_PROFILES;
 - Profile의 목록을 확인한다.

 

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

 

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

SQL> DESC dba_profiles;           ← profile 목록이 저장된 dictionary를 확인한다.
 Name                       Null?    Type
 -------------------------- -------- -----------------
 PROFILE                    NOT NULL VARCHAR2(128)
 RESOURCE_NAME              NOT NULL VARCHAR2(32)
 RESOURCE_TYPE                       VARCHAR2(8)
 LIMIT                               VARCHAR2(128)
 COMMON                              VARCHAR2(3)
 INHERITED                           VARCHAR2(3)
 IMPLICIT                            VARCHAR2(3)

 

SQL> SELECT DISTINCT profile FROM dba_profiles;   ← profile의 목록을 확인한다.
PROFILE
----------------
ORA_STIG_PROFILE
GSM_PROF
DEFAULT                   ← 오라클의 default profile의 이름 (삭제 불가)

 

SQL> SELECT * FROM dba_profiles
 2 WHERE profile = 'DEFAULT'
 3 ORDER BY resource_type; ← 각 profile에 정의된 제한 사항을 확인한다.

PROFILE     RESOURCE_NAME               RESOURCE LIMIT         COM INH IMP
----------- --------------------------- -------- ------------- --- --- ---
DEFAULT     COMPOSITE_LIMIT             KERNEL   UNLIMITED     NO  NO  NO
DEFAULT     SESSIONS_PER_USER           KERNEL   UNLIMITED     NO  NO  NO
..........
..........
DEFAULT     PASSWORD_GRACE_TIME         PASSWORD            7  NO  NO  NO
DEFAULT     PASSWORD_LOCK_TIME          PASSWORD            1  NO  NO  NO
..........
..........
17 rows selected

 

SQL> SELECT username, profile FROM dba_users; ← 각 user별로 정의된 profile을 조회
USERNAME   PROFILE
---------- ----------
SYS        DEFAULT                           ← 모든 사용자가 default PROFILE에 따라 제한된다. 
SYSTEM     DEFAULT (default는 PROFILE 이름이다.)
..........
..........

실습 10.2 Profile 생성과 제한 설정 (필)

 

Profile 설정 은 password와 리소스 두 부분으로 나누어지는데 이중 리소스 관련 설정은 resource_limit가 

반드시 true로 정의되었을 때 만 유효하다. 실습을 통해 profile을 생성하고 제한을 설정해 보자.

 

사용 명령어

SQL> CREATE[| ALTER] PROFILE <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 문장과 동일하다.

 

SQL> SHOW PARAMETER resource_limit 
NAME                   TYPE           VALUE
---------------------- -------------- -----------
resource_limit         boolean        TRUE ← 값이 false인 경우 profile의 리소스 관련 설정은 무시된다.
                                             ALTER SYSTEM SET resource_limit=true;

 

SQL> CREATE PROFILE insa LIMIT ← insa profile을 생성한다. (지정하지 않은 항목은 default로 정의된다.)
 2 SESSIONS_PER_USER 1
 3 IDLE_TIME 5
 4 CONNECT_TIME 10;
Profile created.

 

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

PROFILE    RESOURCE_NAME                    RESOURCE LIMIT
---------- -------------------------------- -------- -------
INSA       COMPOSITE_LIMIT                  KERNEL   DEFAULT ← default profile과 동일한 제한을 받는다. 
INSA       SESSIONS_PER_USER                KERNEL         1
INSA       PRIVATE_SGA                      KERNEL   DEFAULT
INSA       CONNECT_TIME                     KERNEL        10
INSA       IDLE_TIME                        KERNEL         5
..........
..........

 

SQL> ALTER PROFILE insa LIMIT ← 제한 항목의 일부를 수정한다. (문법은 CREATE 문장과 동일하다.)
 2 FAILED_LOGIN_ATTEMPTS 3
 3 PASSWORD_LOCK_TIME 1;

Profile altered.

 

 

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

PROFILE    RESOURCE_NAME                    RESOURCE LIMIT
---------- -------------------------------- -------- -------
INSA       COMPOSITE_LIMIT                  KERNEL   DEFAULT
INSA       SESSIONS_PER_USER                KERNEL         1
INSA       PRIVATE_SGA                      KERNEL   DEFAULT
INSA       CONNECT_TIME                     KERNEL        10
INSA       IDLE_TIME                        KERNEL         5
..........
..........
INSA       PASSWORD_LIFE_TIME               PASSWORD DEFAULT
INSA       FAILED_LOGIN_ATTEMPTS            PASSWORD       3
INSA       PASSWORD_LOCK_TIME               PASSWORD       1
INSA       PASSWORD_GRACE_TIME              PASSWORD DEFAULT

실습 10.3 Profile 할당과 적용 (필)

 

사용 명령어

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

 

SQL> CREATE USER emp ← USER가 존재하는 경우 건너뛴다.
 2 IDENTIFIED BY emp
 3 DEFAULT TABLESPACE insa
 4 TEMPORARY TABLESPACE temp
 5 QUOTA UNLIMITED ON insa;

User created.

 

SQL> GRANT connect, resource TO emp;
Grant succeeded.
SQL> SELECT username, profile
 2 FROM dba_users
 3 WHERE username = 'EMP';

USERNAME   PROFILE
---------- ----------
EMP        DEFAULT

 

SQL> ALTER USER emp ← insa profile을 할당한다. 
 2 PROFILE insa;

User altered.

 

SQL> SELECT username, profile
 2 FROM dba_users
 3 WHERE username = 'EMP';

USERNAME   PROFILE
---------- ----------
EMP        INSA

SQL> CONN emp/in ← 암호를 고의로 틀리게 입력한다.

ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are NO longer Connected TO ORACLE.

 

SQL> CONN emp/in

ERROR:
ORA-01017: invalid username/password; logon denied

 

SQL> CONN emp/in ← FAILED_LOGIN_ATTEMPTS가 3으로 제한되어 lock 걸린다.

ERROR:
ORA-01017: invalid username/password; logon denied

 

SQL> CONN emp/emp ← 암호가 맞지만 이미 lock 걸려 접속이 불가능하다.

ERROR:
ORA-28000: the ACCOUNT is locked

 

SQL> CONN / AS sysdba
Connected.

SQL> SELECT username, account_status FROM dba_users
 2 WHERE username = 'EMP';
USERNAME   account_status
---------- --------------------
INSA       LOCKED(TIMED)

 

SQL> ALTER USER emp
 2 ACCOUNT unlock;   ← PASSWORD_LOCK_TIME이 1일 이므로 24시간 기다리면 자동으로 풀린다.

User altered.

 

SQL> SELECT username, account_status FROM dba_users
 2 WHERE username = 'EMP';

USERNAME   account_status
---------- --------------------
INSA       OPEN


SQL> CONN emp/emp

Connected.