데이터베이스 계정 또는 패스워드 정책 수립시
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
'PostgreSQL' 카테고리의 다른 글
| [PostgreSQL] 관리 및 성능 모니터링 SQL (1) | 2025.11.25 |
|---|---|
| [PostgreSQL] psql 명령어 (0) | 2025.11.25 |
| [PostgreSQL] bufferd I/O vs direct I/O (3) | 2025.11.25 |
| [PostgreSQL] pgvector 설치 및 간단한 사용 예시 (0) | 2025.11.25 |
| [PostgreSQL] Hugepages 설정 (0) | 2025.11.25 |