listen_addresses
(string
)
서버가 클라이언트 애플리케이션으로부터의 연결을 listen하는 TCP/IP 주소를 지정한다.
값은 호스트 이름 및/또는 숫자 IP 주소가 쉼표로 구분된 형태를 취한다.
특수 입력 *
는 사용 가능한 IP 인터페이스 모두를 뜻한다.
0.0.0.0
은 모든 IPv4 주소에 대해 listen하며, ::
는 모든 IPv6 주소에 대해 listen한다.
목록이 빈칸이면 서버가 IP 인터페이스를 일절 listen하지 않으며, 이런 경우 Unix 도메인 소켓만 사용해서 연결할 수 있다.
기본값은 localhost이며, 로컬 TCP/IP “루프백” 연결이 만들어진다.
클라이언트 인증(20장)으로 서버 접근에 대한 권한을 세분화할 수 있는 경우,
listen_addresses
는 연결 시도를 수락하는 인터페이스를 제어함으로써 안전하지 않은 네트워크 인터페이스 상에서 악의적 연결 요청이 반복되는 것을 방지할 수 있다.
이 매개 변수는 서버 시작 시에만 설정 가능하다.
port
(integer
)
기본적으로 서버가 listen하는 TCP 포트는 5432이다. 서버가 listen하는 모든 IP 주소에 동일한 포트 번호가 사용된다. 이 매개 변수는 서버 시작 시에만 설정 가능하다.
max_connections
(integer
)
데이터베이스 서버로의 동시 연결 최대 수를 결정한다. 기본값은 일반적으로 100개 연결이지만 커널 설정이 지원하지 않는 경우 여기에 미치지 못할 수 있다(initdb 중에 결정됨). 이 매개 변수는 서버 시작 시에만 설정 가능하다.
대기 서버 실행 중에 사용자는 max_connections를 마스터 서버 값보다 크거나 같게 설정해야 한다. 그렇지 않으면 대기 서버에서 쿼리가 허용되지 않는다.
superuser_reserved_connections
(integer
)
PostgreSQL 슈퍼유저의 연결용으로 예약된 연결 “슬롯” 수를 결정한다.
최대 max_connections 연결 수가 동시에 활성화된다.
활성화된 동시 연결 수가 max_connections
에서 superuser_reserved_connections
를 뺀 값 이상이면 슈퍼유저만 새롭게 연결되고 복제 연결은 되지 않는다.
기본값은 3이고, max_connections
미만이어야 한다. 이 매개 변수는 서버 시작 시에만 설정 가능하다.
unix_socket_directories
(string
)
서버가 클라이언트 애플리케이션 연결을 listen하는 도메인 소켓의 디렉터리를 지정한다.
복수 디렉터리를 쉼표로 구분하여 나열하면 복수 소켓을 생성할 수 있다. 항목 간 공백은 무시된다.
이름에 공백이나 쉼표를 넣어야 하는 경우 디렉터리 이름 앞뒤에 이중따옴표를 사용한다.
값을 빈칸으로 두면 Unix 도메인 소켓에서 일절 listen하지 않는다. 이때 TCP/IP 소켓만 서버에 연결하는 데 사용될 수 있다.
기본값은 통상 /tmp
이지만, 빌드 시에는 변경 가능하다. 이 매개 변수는 서버 시작 시에만 설정 가능하다.
소켓 외에도, 파일 자체의 이름도 .s.PGSQL.
이다.
여기서 nnnn
nnnn
은 서버의 포트 번호이며,
이름이 .s.PGSQL.
인 일반 파일은 각각의 nnnn
.lockunix_socket_directories
디렉터리에 생성된다.
어떤 파일이든 수동으로 삭제하면 절대 안 된다.
Unix 도메인 소켓이 없는 Windows와 이 매개 변수는 무관하다.
unix_socket_group
(string
)
Unix 도메인 소켓의 소유자 그룹을 설정한다.
(소켓을 소유한 사용자는 항상 서버를 시작하는 사용자이다.)
unix_socket_permissions
매개 변수와 함께 unix_socket_group을 Unix 도메인 연결용 추가 액세스 제어 메커니즘으로 사용할 수 있다.
기본적으로 unix_socket_group은 비어 있는 string이며, 서버 사용자의 기본 그룹을 사용한다. 이 매개 변수는 서버 시작 시에만 설정 가능하다.
Unix 도메인 소켓이 없는 Windows와 이 매개 변수는 무관하다.
unix_socket_permissions
(integer
)
Unix 도메인 소켓의 액세스 권한을 설정한다. Unix 도메인 소켓은 일반적인 Unix 파일 시스템 권한 집합을 사용한다.
매개 변수 값은, chmod
및 umask
시스템 쉘에서 수용되는 숫자 형식을 따른다(관례적인 8진수 형식을 사용하려면 0
(영)으로 시작되는 숫자여야 한다.).
기본 권한은 누구나 연결 가능한 0777
이다.
합리적인 다른 대안은 0770
(사용자와 그룹만. unix_socket_group
참조) 및 0700
(사용자만)이다.
(Unix 도메인 소켓의 경우 쓰기 권한에만 해당되는 문제이므로, 읽기 설정이나 취소 또는 실행 권한과는 무관하다.)
이러한 액세스 제어 메커니즘은 20장에 설명된 것과는 별개이다.
이 매개 변수는 서버 시작 시에만 설정 가능하다.
이 매개 변수는 특히 현재 Solaris 10인 Solaris 시스템과 무관하다.
Solaris는 소켓 권한을 완전히 무시한다.
원하는 대상 그룹(audience)에 한정된 검색 권한을 갖고 있는 디렉터리를 unix_socket_directories
로 하여 유사한 효과를 낼 수 있다.
Unix 도메인 소켓이 없는 Windows에서 이 매개 변수는 사용할 수 없다.
bonjour
(boolean
)
Bonjour를 통해 서버의 존재를 알린다. 기본값은 off이다. 이 매개 변수는 서버 시작 시에만 설정 가능하다.
bonjour_name
(string
)
Bonjour 서비스 이름을 지정한다.
이 매개 변수가 비어 있는 string ''
으로 설정된 경우 컴퓨터 이름이 사용된다(기본값).
서버가 Bonjour 지원으로 컴파일되지 않은 경우 이 매개 변수가 무시된다.
이 매개 변수는 서버 시작 시에만 설정 가능하다.
tcp_keepalives_idle
(integer
)
TCP가 keepalive 메시지를 클라이언트에 전송하기 전에 비활성화 상태로 대기하는 초 수를 지정한다.
0 값은 시스템 기본값을 사용한다. 이 매개 변수는
TCP_KEEPIDLE
또는 이에 상응하는 소켓 옵션을 지원하는
시스템과 Windows에서만 지원되며, 그 외 시스템에서는 0이어야 한다.
Unix 도메인 소켓을 통해 연결된 세션에서 이 매개 변수는 무시되고 항상 0으로 읽힌다.
Windows는 시스템 기본값을 읽을 수 있는 방법이 없으므로 Windows에서 0 값은 이 매개 변수가 2시간으로 설정된다.
tcp_keepalives_interval
(integer
)
클라이언트에 의해 승인되지 않은 TCP keepalive 메시지를 재전송하기 전에 대기하는 초 수를 지정한다.
0 값은 시스템 기본값을 사용한다. 이 매개 변수는 TCP_KEEPINTVL
설정 또는
이에 상응하는 소켓 옵션을 지원하는 시스템과 Windows에서만 지원되며,
그 외 시스템에서는 0이어야 한다.
Unix 도메인 소켓을 통해 연결된 세션에서 이 매개 변수는 무시되고 항상 0으로 읽힌다.
Windows는 시스템 기본값을 읽을 수 있는 방법이 없으므로 Windows에서 0 값은 이 매개 변수가 1초로 설정된다.
tcp_keepalives_count
(integer
)
몇 개의 TCP keepalive를 분실해야 클라이언트와 서버의 연결 상태를 dead로 판단하는 기준이 되는 지를 정한다.
0 값은 시스템 기본값을 사용한다. 이 매개 변수는
TCP_KEEPCNT
설정 또는 이에 상응하는 소켓 옵션을 지원하는 시스템에서만 지원되며,
그 외 시스템에서는 0이어야 한다.
Unix 도메인 소켓을 통해 연결된 세션에서 이 매개 변수는 무시되고 항상 0으로 읽힌다.
이 매개 변수는 Windows에서 지원되지 않으며, 0이어야 한다.
authentication_timeout
(integer
)
클라이언트 인증이 완료되는 최대 시간. 초 단위. 장차 되려고 하는 클라이언트가 이 시간 내에 인증 프로토콜이 완료되지 않은 경우 서버가 연결을 닫는다.
이로써 응답이 없는 클라이언트가 연결을 무기한 점유하는 것을 방지한다. 기본값은 1분이다(1m
). 이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
ssl
(boolean
)
SSL 연결을 설정한다. 이것을 사용하기 전에 18.9절을 읽어보기 바란다.
이 매개 변수는 서버 시작 시에만 설정 가능하다. SSL 통신은 유일하게 TCP/IP 연결만 가능하다.
기본값은 off
이다.
ssl_ca_file
(string
)
SSL 서버 인증 기관(CA)이 포함된 파일 이름을 지정한다. 상대
경로를 사용하면, 그 기준 디렉터리는 데이터 디렉터리다. 이
설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다. 기본값은,
로드된 CA 파일이 없고 클라이언트 인증서 검증이 수행되지 않음을 뜻하는 빈칸이다.
이전 버전에서는 이 파일의 이름은 root.crt
로 하드 코딩되었다.
ssl_cert_file
(string
)
SSL 서버 인증서가 포함된 파일 이름을 지정한다. 상대
경로를 사용하면, 그 기준 디렉터리는 데이터 디렉터리다. 이
설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다. 기본값은
server.crt
이다.
ssl_crl_file
(string
)
SSL 서버 인증서 해지 목록(CRL)이 포함된 파일 이름을 지정한다. 상대
경로를 사용하면, 그 기준 디렉터리는 데이터 디렉터리다. 이
설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다. 기본값은,
로드된 CRL 파일이 없음을 뜻하는 빈칸이다.
이전 버전에서는 이 파일의 이름은 root.crl
로 하드 코딩되었다.
ssl_key_file
(string
)
SSL 서버 개인 키가 포함된 파일 이름을 지정한다. 상대
경로를 사용하면, 그 기준 디렉터리는 데이터 디렉터리다. 이
설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다. 기본값은
server.key
이다.
ssl_ciphers
(string
)
보안 연결에 사용할 수 있는 SSL cipher 스위트suite 목록을
지정한다. 이 설정 구문 및 지원되는 값 목록은 OpenSSL
패키지의 ciphers 설명서를
참조 바란다.
이 설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다.
기본값은 HIGH:MEDIUM:+3DES:!aNULL
이다.
이것은 특별한 보안 요구사항이 없을 경우에 일반적으로 합당하다.
기본값 설명:
HIGH
HIGH
그룹에서 cipher를 사용하는 Cipher 스위트(예: AES, Camellia, 3DES)
MEDIUM
MEDIUM
그룹에서 cipher를 사용하는 Cipher 스위트(예: RC4, SEED)
+3DES
HIGH
에 대한 OpenSSL 기본 순서는 3DES 서열이 AES128보다 높기 때문에 문제가 된다.
3DES는 AES128보다 보안 수준이 떨어지고 느리기까지 하므로 이것은 잘못된 것이다. +3DES
는 다른 모든 HIGH
및 MEDIUM
cipher 뒤로 재배치한다.
!aNULL
인증이 없는 익명의 cipher 스위트를 실행하지 않는다. 해당 cipher 스위트는 중간자(man-in-the-middle) 공격에 취약하므로 사용해서는 안 된다.
사용 가능한 cipher 스위트 상세 내역은 OpenSSL 버전에 따라 달라진다.
현재 설치된 OpenSSL 버전에 대한 실제 상세 내역은 openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL'
명령을 사용해야 한다.
이 목록은 서버 키 유형에 따라 런타임 시 필터링된다는 점에 유의해야 한다.
ssl_prefer_server_ciphers
(boolean
)
SSL cipher 기본 설정을 서버 것으로 사용할 것인지, 클라이언트
것으로 사용할 것인지 지정한다.
이 설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다.
기본값은 true
이다.
다른 PostgreSQL 버전은 이 설정이 없으며, 항상 클라이언트 기본 설정을 사용한다. 이 설정은 주로 해당 버전의 이전 버전과의 호환성에 대한 것이다. 서버가 적절하게 환경 설정되어 있을 가능성이 높으므로 보통은 서버의 기본 설정을 사용하는 것이 더 낫다.
ssl_ecdh_curve
(string
)
ECDH 키 교환에서 사용할 곡선 이름을
지정한다. 연결하는 모든 클라이언트에서 지원되어야
한다. 서버의 타원 곡선 키에서 사용되는 것과 동일한
곡선일 필요는 없다.
이 설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다.
기본값은 prime256v1
이다.
가장 일반적인 곡선의 OpenSSL 이름: prime256v1
(NIST P-256), secp384r1
(NIST P-384), secp521r1
(NIST P-521).
사용 가능한 곡선의 전체 목록은 openssl ecparam -list_curves
명령을 사용하면 표시할 수 있다.
그렇더라도 모든 곡선을 TLS에서 사용할 수 있는 것은 아니다.
password_encryption
(enum
)
When a password is specified in CREATE ROLE or
ALTER ROLE, this parameter determines the algorithm
to use to encrypt the password. The default value is md5
,
which stores the password as an MD5 hash (on
is also
accepted, as alias for md5
). Setting this parameter to
scram-sha-256
will encrypt the password with SCRAM-SHA-256.
Note that older clients might lack support for the SCRAM authentication mechanism, and hence not work with passwords encrypted with SCRAM-SHA-256. See 20.3.2절 for more details.
ssl_dh_params_file
(string
)
Specifies the name of the file containing Diffie-Hellman parameters
used for so-called ephemeral DH family of SSL ciphers. The default is
empty, in which case compiled-in default DH parameters used. Using
custom DH parameters reduces the exposure if an attacker manages to
crack the well-known compiled-in DH parameters. You can create your own
DH parameters file with the command
openssl dhparam -out dhparams.pem 2048
.
이 설정은 postgresql.conf
파일 또는 서버 실행 명령 옵션에서만
지정 가능하다.
krb_server_keyfile
(string
)
Kerberos 서버 키 파일의 위치를 설정한다. 자세한 내용은 20.3.3절을 참조 바란다. 이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
krb_caseins_users
(boolean
)
GSSAPI 사용자 이름의 대소문자를 구분할 것인지 설정한다. 기본값은 off
이다(대소문자 구분).
이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
db_user_namespace
(boolean
)
이 매개 변수는 데이터베이스별 사용자 이름을 사용한다. 기본값은 off이다.
이 매개 변수는 postgresql.conf
파일 또는 서버 커맨드 라인에서만 설정 가능하다.
on일 경우 username@dbname
처럼 사용자를 생성해야 한다.
연결된 클라이언트에 의해 username
이 전달되는 경우, @
및 데이터베이스 이름이 사용자 이름에 추가되고 해당 데이터베이스 특정 사용자 이름이 서버에서 조회된다.
SQL 환경에서 사용자 이름에 @
를 넣어 사용자를 생성하면 사용자 이름에 따옴표를 사용해야 한다는 점에 유의해야 한다.
이 매개 변수를 사용해서 일반 전역 사용자를 생성할 수 있다. 예를 들면 joe@
처럼 사용자 이름에 간단히 @
를 추가하면 된다.
@
는 사용자 이름이 서버에 의해 조회되기 전에 제거된다.
db_user_namespace
는 클라이언트와 서버의 사용자 이름이 다르게 표시되게 한다.
인증 검사는 항상 서버의 사용자 이름이 이용되므로 인증 방법은 클라이언트가 아니라 서버의 사용자 이름으로 환경 설정되어야 한다.
md5
는 사용자 이름을 클라이언트와 서버에서 솔트로 사용하므로, md5
를 db_user_namespace
와 함께 사용할 수 없다.
이 기능을 완벽한 솔루션을 찾을 때까지의 임시 방편용이다. 때가 되면 이 옵션이 삭제된다.