Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 데이터베이스
- kotlin
- NIO
- 인프라
- GIT
- oracle
- 유닉스
- 리눅스
- 코틀린
- Database
- android
- 웹 크롤링
- Spring boot
- chatGPT's answer
- lombok
- flet
- python
- 역학
- JVM
- 자바
- 파이썬
- 소프트웨어공학
- 시스템
- Java
- 고전역학
- GPT-4's answer
- 자바암호
- write by chatGPT
- write by GPT-4
- 자바네트워크
Archives
- Today
- Total
Akashic Records
Oracle 접근제어 방안 - 비밀번호 정책 본문
728x90
오라클 비밀번호 정책 및 가이드
오라클 데이터베이스에서는 다양한 비밀번호 정책을 지원합니다. 이를 적용하기 위해서는
PASSWORD_VERIFY_FUNCTION 함수를 사용하여 비밀번호 정책을 구현하면 됩니다. 아래는 오라클 비밀번호 추천 정책과 예시 코드입니다.
1. 비밀번호 길이
비밀번호 길이는 12자 이상을 권장합니다.
CREATE OR REPLACE FUNCTION verify_function (password IN VARCHAR2) RETURN BOOLEAN IS
BEGIN
IF LENGTH(password) < 12 THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must be at least 12 characters long');
END IF;
RETURN TRUE;
END;
2. 비밀번호 복잡성
비밀번호에 대한 다양한 복잡성 규칙을 적용할 수 있습니다. 대표적으로 다음과 같은 규칙들이 있습니다.
- 대문자, 소문자, 숫자, 특수 문자 포함 여부
- 비밀번호에 사용할 수 없는 문자 제한
- 연속 문자(예: abc, 123) 또는 반복 문자(예: aaa, 111) 제한
CREATE OR REPLACE FUNCTION verify_function (password IN VARCHAR2) RETURN BOOLEAN IS
BEGIN
-- 비밀번호에 대한 복잡성 규칙
IF NOT REGEXP_LIKE(password, '[[:upper:]]') THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must contain an uppercase letter');
END IF;
IF NOT REGEXP_LIKE(password, '[[:lower:]]') THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must contain a lowercase letter');
END IF;
IF NOT REGEXP_LIKE(password, '[[:digit:]]') THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must contain a digit');
END IF;
IF NOT REGEXP_LIKE(password, '[[:punct:]]') THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must contain a special character');
END IF;
IF REGEXP_LIKE(password, '[^a-zA-Z0-9[:punct:]]') THEN
RAISE_APPLICATION_ERROR(-20001, 'Password contains invalid characters');
END IF;
IF REGEXP_LIKE(password, '(.)\1{2,}') THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must not contain more than two identical characters in a row');
END IF;
IF REGEXP_LIKE(password, '([a-zA-Z0-9]){3}') THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must not contain more than two consecutive characters');
END IF;
RETURN TRUE;
END;
4. 비밀번호 만료 기간
비밀번호 만료 기간을 설정하여 주기적으로 비밀번호를 변경할 수 있도록 유도합니다.
CREATE PROFILE limited_password
LIMIT PASSWORD_LIFE_TIME 30;
ALTER USER scott PROFILE limited_password;
5. 비밀번호 재사용 방지
이전에 사용한 비밀번호를 재사용할 수 없도록 설정할 수 있습니다.
CREATE OR REPLACE FUNCTION verify_function (username IN VARCHAR2, password IN VARCHAR2, old_password IN VARCHAR2) RETURN BOOLEAN IS
n INTEGER;
BEGIN
-- username, password, old_password 등의 조건을 만족하지 않을 경우 예외 처리
IF LENGTH(password) < 12 THEN
RAISE_APPLICATION_ERROR(-20001, 'Password must be at least 12 characters long');
END IF;
IF NOT REGEXP_LIKE(password, '[[:upper:]]') THEN
RAISE_APPLICATION_ERROR(-20002, 'Password must contain an uppercase letter');
END IF;
IF NOT REGEXP_LIKE(password, '[[:lower:]]') THEN
RAISE_APPLICATION_ERROR(-20003, 'Password must contain a lowercase letter');
END IF;
IF NOT REGEXP_LIKE(password, '[[:digit:]]') THEN
RAISE_APPLICATION_ERROR(-20004, 'Password must contain a digit');
END IF;
IF NOT REGEXP_LIKE(password, '[[:punct:]]') THEN
RAISE_APPLICATION_ERROR(-20005, 'Password must contain a special character');
END IF;
IF REGEXP_LIKE(password, '[^a-zA-Z0-9[:punct:]]') THEN
RAISE_APPLICATION_ERROR(-20006, 'Password contains invalid characters');
END IF;
IF REGEXP_LIKE(password, '(.)\1{2,}') THEN
RAISE_APPLICATION_ERROR(-20007, 'Password must not contain more than two identical characters in a row');
END IF;
IF REGEXP_LIKE(password, '([a-zA-Z0-9]){3}') THEN
RAISE_APPLICATION_ERROR(-20008, 'Password must not contain more than two consecutive characters');
END IF;
-- 이전 비밀번호와 동일할 경우 예외 처리
SELECT COUNT(*) INTO n FROM dba_users WHERE username=username AND password=old_password;
IF n > 0 THEN
RAISE_APPLICATION_ERROR(-20009, 'You cannot reuse your old password');
END IF;
RETURN TRUE;
END;
위와 같은 예시 코드를 PASSWORD_VERIFY_FUNCTION 함수로 등록하면 해당 비밀번호 정책이 적용됩니다. 예를 들어, 아래와 같이 새로운 사용자를 생성할 때 PASSWORD_VERIFY_FUNCTION 함수를 사용하여 비밀번호 정책을 적용할 수 있습니다.
CREATE USER scott IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
PROFILE limited_password
PASSWORD_VERIFY_FUNCTION verify_function;
이렇게 생성된 사용자는 PASSWORD_VERIFY_FUNCTION 함수에서 정의한 비밀번호 정책을 만족해야만 비밀번호를 변경할 수 있습니다.
728x90
'Database Learning Guide' 카테고리의 다른 글
Oracle Transaction Isolation Level (0) | 2023.03.14 |
---|---|
Oracle Transactions and Concurrency (1) | 2023.03.14 |
Oracle 접근제어 방안 - 암호화 (0) | 2023.03.13 |
Oracle 접근제어 방안 - 계정 관리, 롤 기반 권한 관리 (0) | 2023.03.13 |
데이터베이스 보안성 유지를 위한 방안 (0) | 2023.03.13 |
Comments