긍정적인 사고와 행동으로 선한 영향력을 줄 수 있도록

PostgreSQL

[PostgreSQL] 패스워드 정책 설정 및 비교

리거니 2025. 11. 25. 09:45

데이터베이스 계정 또는 패스워드 정책 수립시
PostgreSQL은 기본적인 설정 기능을 제공하지 않기 때문에 추가 설정이 필요합니다.
PostgreSQL 패스워드 정책 관련 모듈은 크게 passwordcheck 및 credcheck 가 있습니다.
아래에서는 각 모듈들에 대한 설치과정과 기능 및 장단점을 비교하여 설명합니다.

01. 설치과정


(1) PasswordCheck

1. 해당 모듈은 사용자 비밀번호 정책에 대한 기능을 가짐
2. PostgreSQL 설치 시 기본적으로 해당 라이브러리를 제공

1. shared_preload_libraries = 'passwordcheck' 추가
2. 서버 재기동

 

(2) CredCheck

1. 해당 모듈은 사용자 계정 관련 정책을 포함하여 passwordcheck 보다 정책이 다양함
2. Tarandb 구성 시 제공하는 RPM 패키지가 있기 때문에 설치가 유용함

1. dnf install -y 04.tarandb_rhel_rpms_v16/490.credcheck_rpm/*.rpm
2. shared_preload_libraries = 'credcheck' 추가
3. 서버 재기동
4. create extension credcheck with schema public;

 

02. 기능


(1) PasswordCheck

1. 8자리 이상 사용
postgres=# create user test login password 'abcdefg';
ERROR:  password is too short

2. 숫자,문자 혼용 사용
postgres=# create user test login password 'abcdefgh';
ERROR:  password must contain both letters and nonletters

3. 유저명과 같거나 유저명을 포함하는 패스워드 사용 불가
postgres=# create user test login password 'test1234';
ERROR:  password must not contain user name

 


(2) CredCheck

1. 유저명 관련 정책
credcheck.username_min_length 최소 길이
credcheck.username_min_special 특수문자 최소 개수
credcheck.username_min_digit 최소 숫자
credcheck.username_min_upper,lower 대,소문자의 최소 개수
credcheck.username_min_repeat 반복되는 문자 최대 허용 횟수
credcheck.username_contain_password 사용자 이름에 비밀번호 미포함 여부
credcheck.username_contain 사용자 이름에 반드시 포함되어야 하는 문자 포함 여부

2. 비밀번호 복잡도 설정
credcheck.password_min_length   최소 길이
credcheck.password_min_special  특수문자 최소 개수
credcheck.password_min_digit 최소 숫자
credcheck.password_min_upper,lower 대,소문자의 최소 개수
credcheck.password_min_repeat 반복되는 문자 최대 허용 횟수
credcheck.password_contain_username  패스워드에 비밀번호 미포함 여부
credcheck.password_contain 패스워드에 반드시 포함되어야 하는 문자 포함 여부 
credcheck.password_not_contain 패스워드에 반드시 포함되지 않아야 하는 문자 포함 여부 
credcheck.max_auth_failure 비밀번호 실패 횟수 제한

3. 비밀번호 유효기간
credcheck.password_valid_until 비밀번호 유효 기간(최소 일수) 설정
credcheck.password_valid_max  비밀번호 유효 기간(만료일) 설정

4. 비밀번호 재사용 방지 설정
credcheck.password_reuse_history  비밀번호 재사용 불가능한 비밀번호 개수 
credcheck.password_reuse_interval 비밀번호 재사용 가능한 일

5. superuser 차단 금지 설정 
credcheck.reset_superuser 로그인 실패 횟수 초과로 잠김 계정 초기화




03. 기본 파라미터


SQL> select name, setting from pg_settings where name like 'credcheck%';
                 name                 | setting
--------------------------------------+---------
 credcheck.auth_delay_ms              | 0
 credcheck.auth_failure_cache_size    | 1024
 credcheck.encrypted_password_allowed | off
 credcheck.history_max_size           | 65535
 credcheck.max_auth_failure           | 0
 credcheck.no_password_logging        | on
 credcheck.password_contain           |
 credcheck.password_contain_username  | on
 credcheck.password_ignore_case       | off
 credcheck.password_min_digit         | 0
 credcheck.password_min_length        | 1
 credcheck.password_min_lower         | 0
 credcheck.password_min_repeat        | 0
 credcheck.password_min_special       | 0
 credcheck.password_min_upper         | 0
 credcheck.password_not_contain       |
 credcheck.password_reuse_history     | 0
 credcheck.password_reuse_interval    | 0
 credcheck.password_valid_max         | 0
 credcheck.password_valid_until       | 0
 credcheck.reset_superuser            | off
 credcheck.username_contain           |
 credcheck.username_contain_password  | on
 credcheck.username_ignore_case       | off
 credcheck.username_min_digit         | 0
 credcheck.username_min_length        | 1
 credcheck.username_min_lower         | 0
 credcheck.username_min_repeat        | 0
 credcheck.username_min_special       | 0
 credcheck.username_min_upper         | 0
 credcheck.username_not_contain       |
 credcheck.whitelist                  |
(32 rows)




04. 파라미터 설정


1. ALTER SYSTEM (시스템 전체 적용)
SQL> ALTER SYSTEM SET credcheck.username_min_length = 5;
ALTER SYSTEM

[tarandb@tdb-db1:/home/tarandb]
$ pg_ctl reload;
server signaled

SQL> SHOW credcheck.username_min_length;
 credcheck.username_min_length
-------------------------------
 5
(1 row)


2. SET (해당 세션에만 일시적으로 적용)
SQL> SET credcheck.username_min_length = 4;
SET

SQL> SHOW credcheck.username_min_length;
 credcheck.username_min_length
-------------------------------
 4
(1 row)

 

05. 장단점


(1) PasswordCheck

1. 패키지 및 extension 설치 필요없이 사용 가능
2. 패스워드 관련 정책 설정 기능이 단순함 

 


(2) CredCheck

1. 유저명, 패스워드, 유효기간 등을 통해 보안정책 수립 용이
2. 계정별 정책 수립 및 관리 필요
3. 로그인 실패 횟수 초과로 잠길경우 계정 초기화 필요

 

06. 참고자료


https://github.com/HexaCluster/credcheck#readme
https://www.postgresql.org/docs/current/passwordcheck.html