listen_addresses
(string
) #指定伺服器監聽客戶端連線的 TCP/IP 地址。該值可以是一個或多個由逗號分隔的 主機名 和/或數字 IP 地址的列表。特殊條目 *
對應所有可用的 IP 介面。條目 0.0.0.0
允許監聽所有 IPv4 地址,而 ::
允許監聽所有 IPv6 地址。如果列表為空,伺服器根本不會監聽任何 IP 介面,在這種情況下只能使用 Unix 域套接字連線伺服器。如果列表不為空,伺服器將在至少一個 TCP/IP 地址上啟動監聽。對於任何無法開啟的 TCP/IP 地址都會發出警告。預設值為 localhost,它只允許建立本地 TCP/IP “迴環” 連線。
儘管客戶端認證 (第 20 章) 允許對誰可以訪問伺服器進行細粒度控制,但 listen_addresses
控制哪些介面接受連線嘗試,這可以幫助防止在不安全的網路介面上反覆出現惡意連線請求。此引數只能在伺服器啟動時設定。
port
(integer
) #伺服器監聽的 TCP 埠;預設是 5432。請注意,伺服器監聽的所有 IP 地址都使用相同的埠號。此引數只能在伺服器啟動時設定。
max_connections
(integer
) #確定到資料庫伺服器的最大併發連線數。預設值通常是 100 個連線,但如果您的核心設定不支援(在 initdb 期間確定),可能會更少。此引數只能在伺服器啟動時設定。
PostgreSQL 根據 max_connections
的值直接調整某些資源的大小。增加其值會導致對這些資源的分配增加,包括共享記憶體。
執行備用伺服器時,必須將此引數設定為與主伺服器相同或更高的值。否則,將不允許在備用伺服器上執行查詢。
reserved_connections
(integer
) #確定為具有 pg_use_reserved_connections 角色的連線保留的連線“槽”數量。當空閒連線槽的數量大於 superuser_reserved_connections 但小於或等於 superuser_reserved_connections
和 reserved_connections
的總和時,新連線將僅接受給超級使用者和具有 pg_use_reserved_connections
許可權的角色。如果可用連線槽的數量等於或少於 superuser_reserved_connections
,新連線將僅接受給超級使用者。
預設值為零連線。該值必須小於 max_connections
減去 superuser_reserved_connections
。此引數只能在伺服器啟動時設定。
superuser_reserved_connections
(integer
) #確定為 PostgreSQL 超級使用者連線保留的連線“槽”數量。最多隻能有 max_connections 個連線可以同時處於活動狀態。當活動併發連線數至少為 max_connections
減去 superuser_reserved_connections
時,新連線將僅接受給超級使用者。此引數保留的連線槽旨在作為最後儲備,在 reserved_connections 保留的槽用完後用於緊急使用。
預設值為三個連線。該值必須小於 max_connections
減去 reserved_connections
。此引數只能在伺服器啟動時設定。
unix_socket_directories
(string
) #指定伺服器監聽客戶端連線的 Unix 域套接字目錄。可以透過列出多個由逗號分隔的目錄來建立多個套接字。條目之間的空格將被忽略;如果目錄名稱包含空格或逗號,請用雙引號將其括起來。空值表示不監聽任何 Unix 域套接字,在這種情況下只能使用 TCP/IP 套接字連線伺服器。
以 @
開頭的值表示將建立一個 抽象名稱空間 中的 Unix 域套接字(目前僅支援 Linux)。在這種情況下,該值不指定“目錄”,而是計算實際套接字名稱的字首,其方式與檔案系統名稱空間相同。儘管抽象套接字名稱字首可以自由選擇,但由於它不是檔案系統位置,因此習慣上仍使用類似 @/tmp
的檔案系統類值。
預設值通常是 /tmp
,但可以根據構建時間進行更改。在 Windows 上,預設值為空,這意味著預設情況下不會建立 Unix 域套接字。此引數只能在伺服器啟動時設定。
除了套接字檔案本身(命名為 .s.PGSQL.
,其中 nnnn
nnnn
是伺服器的埠號)之外,在 unix_socket_directories
中的每個目錄中還會建立一個名為 .s.PGSQL.
的普通檔案。這兩個檔案都不應手動刪除。對於抽象名稱空間中的套接字,不會建立鎖定檔案。nnnn
.lock
unix_socket_group
(string
) #設定 Unix 域套接字的所有者組。(套接字的所有者使用者始終是啟動伺服器的使用者。)與 unix_socket_permissions
引數結合使用,可以作為 Unix 域連線的額外訪問控制機制。預設值為空字串,它使用伺服器使用者的預設組。此引數只能在伺服器啟動時設定。
此引數在 Windows 上不受支援。任何設定都將被忽略。同樣,抽象名稱空間中的套接字沒有檔案所有者,因此在這種情況下此設定也將被忽略。
unix_socket_permissions
(integer
) #設定 Unix 域套接字的訪問許可權。Unix 域套接字使用通常的 Unix 檔案系統許可權集。引數值應以 chmod
和 umask
系統呼叫接受的格式指定的數字模式。(要使用習慣的八進位制格式,數字必須以 0
(零)開頭。)
預設許可權為 0777
,表示任何人都可以連線。合理的替代方案是 0770
(僅限使用者和組,另請參見 unix_socket_group
)和 0700
(僅限使用者)。(請注意,對於 Unix 域套接字,只有寫許可權才重要,因此設定或撤銷讀或執行許可權沒有意義。)
此訪問控制機制獨立於 第 20 章 中描述的機制。
此引數只能在伺服器啟動時設定。
此引數在忽略套接字許可權的系統(例如 Solaris 10 之後的 Solaris)上無關緊要。在那裡,可以透過將 unix_socket_directories
指向具有受限搜尋許可權的目錄來實現類似效果。
抽象名稱空間中的套接字沒有檔案許可權,因此在這種情況下此設定也將被忽略。
bonjour
(boolean
) #啟用透過 Bonjour 廣告伺服器的存在。預設值為 off。此引數只能在伺服器啟動時設定。
bonjour_name
(string
) #指定 Bonjour 服務名稱。如果此引數設定為空字串 ''
(這是預設值),則使用計算機名稱。如果伺服器不是使用 Bonjour 支援編譯的,則此引數將被忽略。此引數只能在伺服器啟動時設定。
tcp_keepalives_idle
(integer
) #指定在沒有網路活動後作業系統應向客戶端傳送 TCP keepalive 訊息的時間量。如果此值未指定單位,則視為秒。值為 0(預設值)會選擇作業系統的預設值。在 Windows 上,將值設定為 0 會將此引數設定為 2 小時,因為 Windows 不提供讀取系統預設值的方法。此引數僅在支援 TCP_KEEPIDLE
或等效套接字選項的系統以及 Windows 上受支援;在其他系統上,它必須為零。在透過 Unix 域套接字連線的會話中,此引數將被忽略,並且始終讀為零。
tcp_keepalives_interval
(integer
) #指定在未被客戶端確認的 TCP keepalive 訊息應該被重傳的時間量。如果此值未指定單位,則視為秒。值為 0(預設值)會選擇作業系統的預設值。在 Windows 上,將值設定為 0 會將此引數設定為 1 秒,因為 Windows 不提供讀取系統預設值的方法。此引數僅在支援 TCP_KEEPINTVL
或等效套接字選項的系統以及 Windows 上受支援;在其他系統上,它必須為零。在透過 Unix 域套接字連線的會話中,此引數將被忽略,並且始終讀為零。
tcp_keepalives_count
(integer
) #指定在伺服器與客戶端的連線被視為死掉之前可以丟失多少個 TCP keepalive 訊息。值為 0(預設值)會選擇作業系統的預設值。此引數僅在支援 TCP_KEEPCNT
或等效套接字選項的系統上受支援(不包括 Windows);在其他系統上,它必須為零。在透過 Unix 域套接字連線的會話中,此引數將被忽略,並且始終讀為零。
tcp_user_timeout
(integer
) #指定傳輸的資料在被確認之前可能保持未確認的時間量,之後 TCP 連線將被強制關閉。如果此值未指定單位,則視為毫秒。值為 0(預設值)會選擇作業系統的預設值。此引數僅在支援 TCP_USER_TIMEOUT
的系統上受支援(不包括 Windows);在其他系統上,它必須為零。在透過 Unix 域套接字連線的會話中,此引數將被忽略,並且始終讀為零。
client_connection_check_interval
(integer
) #設定在執行查詢期間,進行可選的客戶端仍然連線的檢查之間的時間間隔。檢查是透過輪詢套接字進行的,並允許在核心報告連線已關閉時更早地中止長時間執行的查詢。
此選項依賴於 Linux、macOS、illumos 和 BSD 系列作業系統公開的核心事件,目前在其他系統上不可用。
如果未指定單位,則該值視為毫秒。預設值為 0
,表示停用連線檢查。沒有連線檢查,伺服器將在下次與套接字互動時(當它等待、接收或傳送資料時)才檢測到連線丟失。
為了讓核心本身在所有場景(包括網路故障)中可靠地在已知時間內檢測到丟失的 TCP 連線,可能還需要調整作業系統的 TCP keepalive 設定,或者 PostgreSQL 的 tcp_keepalives_idle、tcp_keepalives_interval 和 tcp_keepalives_count 設定。
authentication_timeout
(integer
) #完成客戶端認證所允許的最大時間。如果一個潛在的客戶端在此時間內未能完成認證協議,伺服器將關閉連線。這可以防止掛起的客戶端無限期地佔用連線。如果此值未指定單位,則視為秒。預設值為一分鐘(1m
)。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
password_encryption
(enum
) #當在 CREATE ROLE 或 ALTER ROLE 中指定密碼時,此引數決定用於加密密碼的演算法。可能的值為 scram-sha-256
,它將使用 SCRAM-SHA-256 加密密碼;以及 md5
,它將密碼儲存為 MD5 雜湊。預設值為 scram-sha-256
。
請注意,較舊的客戶端可能不支援 SCRAM 認證機制,因此無法使用 SCRAM-SHA-256 加密的密碼。有關更多詳細資訊,請參見 20.5. 密碼認證。
MD5 加密密碼的支援已棄用,將在 PostgreSQL 的未來版本中移除。有關遷移到其他密碼型別的詳細資訊,請參閱第 20.5 節。
scram_iterations
(integer
) #使用 SCRAM-SHA-256 加密密碼時執行的計算迭代次數。預設值為 4096
。較高的迭代次數可提供額外的保護,防止儲存密碼遭受暴力破解攻擊,但會使認證變慢。更改此值不會影響使用 SCRAM-SHA-256 加密的現有密碼,因為迭代次數在加密時固定。為了利用更改後的值,必須設定新密碼。
md5_password_warnings
(boolean
) #控制當 CREATE ROLE
或 ALTER ROLE
語句設定 MD5 加密密碼時,是否會生成有關 MD5 密碼棄用的 WARNING
。預設值為 on
。
krb_server_keyfile
(string
) #設定伺服器的 Kerberos 金鑰檔案位置。預設值為 FILE:/usr/local/pgsql/etc/krb5.keytab
(其中目錄部分是構建時指定的 sysconfdir
;使用 pg_config --sysconfdir
來確定)。如果此引數設定為空字串,則忽略它,並使用系統相關的預設值。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。有關更多資訊,請參見 20.6. GSSAPI 認證。
krb_caseins_users
(boolean
) #設定 GSSAPI 使用者名稱是否應被視為不區分大小寫。預設值為 off
(區分大小寫)。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
gss_accept_delegation
(boolean
) #設定是否應從客戶端接受 GSSAPI 代理。預設值為 off
,表示客戶端的憑據將 不 被接受。將其更改為 on
將使伺服器接受從客戶端代理給它的憑據。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
oauth_validator_libraries
(string
) #用於驗證 OAuth 連線令牌的庫。如果只提供一個驗證器庫,它將預設用於任何 OAuth 連線;否則,所有 oauth
HBA 條目 都必須顯式設定一個從該列表中選擇的 validator
。如果設定為(預設的)空字串,OAuth 連線將被拒絕。此引數只能在 postgresql.conf
檔案中設定。
驗證器模組必須單獨實現/獲取;PostgreSQL 不提供任何預設實現。有關實現 OAuth 驗證器的更多資訊,請參見 第 50 章。
有關設定的資訊,請參見 18.9. 使用 SSL 進行安全 TCP/IP 連線。SSL。用於控制使用TLS協議進行傳輸加密的配置引數,出於歷史原因命名為 ssl
,儘管對SSL協議的支援已被棄用。SSL在此上下文中使用,與TLS.
ssl
(boolean
) #啟用SSL連線。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為 off
。
ssl_ca_file
(string
) #指定包含 SSL 伺服器證書頒發機構 (CA) 的檔名。相對路徑相對於資料目錄。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為空,表示不載入 CA 檔案,並且不執行客戶端證書驗證。
ssl_cert_file
(string
) #指定包含 SSL 伺服器證書的檔名。相對路徑相對於資料目錄。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為 server.crt
。
ssl_crl_file
(string
) #指定包含 SSL 客戶端證書吊銷列表 (CRL) 的檔名。相對路徑相對於資料目錄。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為空,表示不載入 CRL 檔案(除非設定了 ssl_crl_dir)。
ssl_crl_dir
(string
) #指定包含 SSL 客戶端證書吊銷列表 (CRL) 的目錄名稱。相對路徑相對於資料目錄。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為空,表示不使用 CRL(除非設定了 ssl_crl_file)。
目錄需要使用 OpenSSL 命令 openssl rehash
或 c_rehash
進行準備。有關詳細資訊,請參見其文件。
使用此設定時,指定目錄中的 CRL 將在連線時按需載入。新 CRL 可以新增到目錄中,並將立即使用。這與 ssl_crl_file 不同,後者會導致檔案中的 CRL 在伺服器啟動時或配置重新載入時載入。兩者都可以一起使用。
ssl_key_file
(string
) #指定包含 SSL 伺服器私鑰的檔名。相對路徑相對於資料目錄。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為 server.key
。
ssl_tls13_ciphers
(string
) #指定允許使用TLS版本 1.3 的連線使用的密碼套件列表。可以使用冒號分隔的列表指定多個密碼套件。如果留空,將使用 OpenSSL 的預設密碼套件集。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
ssl_ciphers
(string
) #指定允許使用 TLS 版本 1.2 及更低版本進行連線的SSL密碼列表,對於 TLS 版本 1.3 連線,請參閱 ssl_tls13_ciphers。有關此設定的語法和支援值的列表,請參閱 OpenSSL 包中的 ciphers 手冊頁。預設值為 HIGH:MEDIUM:+3DES:!aNULL
。除非您有特定的安全要求,否則預設值通常是一個合理的選擇。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
預設值的解釋
可用的密碼套件詳細資訊將因 OpenSSL 版本而異。使用命令 openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL'
檢視當前安裝的 OpenSSL 版本的實際詳細資訊。請注意,此列表將在執行時根據伺服器金鑰型別進行過濾。
ssl_prefer_server_ciphers
(boolean
) #指定是使用伺服器的 SSL 密碼首選項,而不是客戶端的。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為 on
。
PostgreSQL 9.4 之前的版本沒有此設定,並且始終使用客戶端的首選項。使用伺服器的首選項通常更好,因為伺服器更有可能經過適當配置。
ssl_groups
(string
) #指定在ECDH金鑰交換中使用的曲線的名稱。它需要被所有連線的客戶端支援。可以使用冒號分隔的列表指定多條曲線。它不需要與伺服器的橢圓曲線金鑰使用的曲線相同。此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。預設值為 X25519:prime256v1
。
OpenSSL 中最常見曲線的名稱是:prime256v1
(NIST P-256)、secp384r1
(NIST P-384)、secp521r1
(NIST P-521)。可以使用命令 openssl ecparam -list_curves
顯示可用組的不完整列表。並非所有這些組都可用於TLS,並且許多支援的組名稱和別名已被省略。
在 PostgreSQL 18.0 之前的版本中,此設定名為 ssl_ecdh_curve
,並且只接受單個值。
ssl_min_protocol_version
(enum
) #設定要使用的最低 SSL/TLS 協議版本。當前有效值包括:TLSv1
、TLSv1.1
、TLSv1.2
、TLSv1.3
。舊版本的 OpenSSL 庫不支援所有值;如果選擇了不支援的設定,將引發錯誤。TLS 1.0 之前的協議版本,即 SSL 版本 2 和 3,始終被停用。
預設值為 TLSv1.2
,這符合當前的行業最佳實踐。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
ssl_max_protocol_version
(enum
) #設定要使用的最高 SSL/TLS 協議版本。有效值與 ssl_min_protocol_version 相同,此外還有一個空字串,它允許任何協議版本。預設允許任何版本。設定最高協議版本主要用於測試,或當某個元件在與較新協議配合使用時出現問題時。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
ssl_dh_params_file
(string
) #指定包含用於所謂的臨時 DH 密碼族的 Diffie-Hellman 引數的檔名。預設值為空,在這種情況下使用編譯時預設的 DH 引數。使用自定義 DH 引數可以減少攻擊者破解廣為人知的編譯時 DH 引數的風險。您可以使用命令 openssl dhparam -out dhparams.pem 2048
建立自己的 DH 引數檔案。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
ssl_passphrase_command
(string
) #設定當需要獲取解密 SSL 檔案(如私鑰)的密碼時要呼叫的外部命令。預設情況下,此引數為空,這意味著使用內建的提示機制。
該命令必須將密碼列印到標準輸出並以程式碼 0 退出。在引數值中,%p
會被替換為提示字串。(寫入 %%
表示字面量的 %
。)請注意,提示字串可能包含空格,請確保充分引用。如果存在,則從輸出末尾剝離單個換行符。
該命令實際上不必提示使用者輸入密碼。它可以從檔案中讀取密碼,從鑰匙串設施獲取密碼,或者類似操作。由使用者自行確保所選機制足夠安全。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
ssl_passphrase_command_supports_reload
(boolean
) #此引數決定在配置重新載入期間是否也呼叫由 ssl_passphrase_command
設定的密碼命令,如果金鑰檔案需要密碼。如果此引數為 off(預設值),則 ssl_passphrase_command
在重新載入期間將被忽略,並且如果需要密碼,SSL 配置將不會被重新載入。該設定適用於需要 TTY 進行提示的命令,因為在伺服器執行時可能無法獲得 TTY。將此引數設定為 on 可能適用於從檔案獲取密碼等情況。
此引數只能在 postgresql.conf
檔案或伺服器命令列中設定。
如果您在文件中看到任何不正確的內容,與您使用特定功能的經驗不符,或者需要進一步的解釋,請使用 此表單 來報告文件問題。