본문으로 건너뛰기

PostgreSQL 문제 해결

본 문서는 PostgreSQL 서비스 관련 문제를 해결하기 위한 방법을 설명합니다.


PostgreSQL 로그에 사용자 비밀번호 노출

CREATE, ALTER와 같은 명령어를 사용할 때 PostgreSQL 로그에 사용자의 비밀번호와 같은 주요 정보가 일반 텍스트로 노출됩니다.

비밀번호 노출 예시
# CREATE 명령어를 사용합니다.
postgres=> CREATE ROLE test_kc_mapo WITH PASSWORD ‘test0701’;

#로그를 조회하면 패스워드가 그대로 노출됩니다.
2025-07-01 12:00:00 UTC [12345] LOG: statement: CREATE ROLE test_kc_mapo WITH PASSWORD 'test0701'

▶️ 해결 방법: 보안 위험을 방지하기 위해 비밀번호 관련 작업은 SQL 명령문이 아닌 클라이언트에서 동작하는 \password 사용을 권장드립니다.

  1. 사용자 비밀번호 관련 작업에 \password 명령어를 사용합니다.

    \password 사용 예시
    # 1. 'test_kc_mapo' 계정을 생성합니다. ALTER 로그를 확인하기 위해 로그인 권한을 부여하지 않습니다.
    postgres=> CREATE ROLE test_kc_mapo NOLOGIN;CREATE ROLE

    #2. `\password` 를 활용하여 비밀번호를 변경하고 로그인 권한을 부여합니다.
    postgres=> \password test_kc_mapo
    Enter new password:
    Enter it again:
    postgres=> ALTER ROLE test_kc_mapo LOGIN;
    ALTER ROLE
    postgres=>
  2. 변경 작업에 대한 로그를 확인합니다.

    로그 조회 예시
    # 암호화 방식은 PostgreSQL마다 상이하나 기본적으로 패스워드는 암호화되어 노출되지 않습니다.
    2025-07-01 12:00:29 UTC [12345] LOG: statement: CREATE ROLE test_kc_mapo NOLOGIN;
    2025-07-01 12:00:48 UTC [12345] LOG: statement: ALTER USER test_kc_mapo PASSWORD '*******'
    2025-07-01 12:01:06 UTC [12345] LOG: statement: CREATE ROLE test_kc_mapo LOGIN;