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 網域 socket 的目錄。可以透過列出以逗號分隔的多個目錄來建立多個 socket。條目之間的空白會被忽略;如果需要在名稱中包含空格或逗號,請用雙引號括住目錄名稱。空值表示不監聽任何 Unix 網域 socket,在這種情況下,只能使用 TCP/IP socket 連接到伺服器。
以 @
開頭的值指定應該在抽象命名空間中建立 Unix 網域 socket (目前僅在 Linux 上支援)。在這種情況下,此值不指定「目錄」,而是指定一個前綴,實際的 socket 名稱將以與檔案系統命名空間相同的方式計算得出。雖然抽象 socket 名稱前綴可以自由選擇,但由於它不是檔案系統位置,因此慣例是仍然使用類似檔案系統的值,例如 @/tmp
。
預設值通常為 /tmp
,但可以在建置時變更。在 Windows 上,預設值為空,這表示預設情況下不會建立 Unix 網域 socket。此參數只能在伺服器啟動時設定。
除了 socket 檔案本身,其名稱為 .s.PGSQL.
,其中 nnnn
nnnn
是伺服器的埠號外,還會在每個 unix_socket_directories
目錄中建立一個名為 .s.PGSQL.
的普通檔案。這兩個檔案都不應手動移除。對於抽象命名空間中的 socket,不會建立鎖定檔案。nnnn
.lock
unix_socket_group
(string
) #設定 Unix 網域 socket 的擁有群組。(socket 的擁有使用者始終是啟動伺服器的使用者。) 結合參數 unix_socket_permissions
,這可用作 Unix 網域連線的額外存取控制機制。預設情況下,這是空字串,它使用伺服器使用者的預設群組。此參數只能在伺服器啟動時設定。
Windows 不支援此參數。任何設定都將被忽略。此外,抽象命名空間中的 socket 沒有檔案擁有者,因此在此情況下也會忽略此設定。
unix_socket_permissions
(integer
) #設定 Unix 網域 socket 的存取權限。Unix 網域 socket 使用常見的 Unix 檔案系統權限集。參數值應該是 chmod
和 umask
系統呼叫接受的格式指定的數字模式。(若要使用習慣的八進位格式,數字必須以 0
(零) 開頭。)
預設權限為 0777
,表示任何人都可連線。合理的替代方案是 0770
(僅使用者和群組,另請參閱 unix_socket_group
) 和 0700
(僅使用者)。(請注意,對於 Unix 網域 socket,只有寫入權限才是重要的,因此設定或撤銷讀取或執行權限沒有意義。)
此存取控制機制獨立於 第 20 章 中描述的機制。
此參數只能在伺服器啟動時設定。
此參數與系統無關,特別是 Solaris 10 及更高版本,它們完全忽略 socket 權限。在那裡,您可以透過將 unix_socket_directories
指向具有搜尋權限的目錄來實現類似的效果,該權限僅限於所需的受眾。
抽象命名空間中的 socket 沒有檔案權限,因此在此情況下也會忽略此設定。
bonjour
(boolean
) #啟用透過 Bonjour 廣播伺服器的存在。預設值為關閉。此參數只能在伺服器啟動時設定。
bonjour_name
(string
) #指定 Bonjour 服務名稱。如果此參數設定為空字串 ''
(預設值),則使用電腦名稱。如果伺服器沒有使用 Bonjour 支援進行編譯,則會忽略此參數。此參數只能在伺服器啟動時設定。
tcp_keepalives_idle
(integer
) #指定在沒有網路活動的情況下,作業系統應向客戶端發送 TCP keepalive 訊息的時間量。如果未指定單位,則預設為秒。值 0 (預設值) 選擇作業系統的預設值。在 Windows 上,將值設定為 0 會將此參數設定為 2 小時,因為 Windows 無法讀取系統預設值。此參數僅在支援 TCP_KEEPIDLE
或等效 socket 選項的系統上,以及在 Windows 上受支援;在其他系統上,它必須為零。在透過 Unix 網域 socket 連線的會話中,此參數將被忽略,並且始終讀取為零。
tcp_keepalives_interval
(integer
) #指定在 TCP keepalive 訊息未收到客戶端確認後,應重新傳輸的時間長度。如果此值在指定時沒有單位,則視為秒數。值為 0(預設值)會選擇作業系統的預設值。在 Windows 上,將值設為 0 會將此參數設為 1 秒,因為 Windows 沒有提供讀取系統預設值的方法。此參數僅在支援 TCP_KEEPINTVL
或等效的 socket 選項,以及在 Windows 上才支援;在其他系統上,它必須為零。在透過 Unix 網域 socket 連線的會話中,此參數會被忽略,並且總是讀取為零。
tcp_keepalives_count
(integer
) #指定在伺服器與客戶端的連線被認為已失效之前,可以遺失的 TCP keepalive 訊息數量。值為 0(預設值)會選擇作業系統的預設值。此參數僅在支援 TCP_KEEPCNT
或等效的 socket 選項的系統上才支援(不包括 Windows);在其他系統上,它必須為零。在透過 Unix 網域 socket 連線的會話中,此參數會被忽略,並且總是讀取為零。
tcp_user_timeout
(integer
) #指定已傳輸的資料在 TCP 連線被強制關閉之前,可以保持未確認的時間長度。如果此值在指定時沒有單位,則視為毫秒。值為 0(預設值)會選擇作業系統的預設值。此參數僅在支援 TCP_USER_TIMEOUT
的系統上才支援(不包括 Windows);在其他系統上,它必須為零。在透過 Unix 網域 socket 連線的會話中,此參數會被忽略,並且總是讀取為零。
client_connection_check_interval
(integer
) #設定在執行查詢時,定期檢查客戶端是否仍連線的時間間隔。此檢查透過輪詢 socket 來執行,並且允許長時間執行的查詢在核心報告連線已關閉時更快中止。
此選項依賴於 Linux、macOS、illumos 和 BSD 系列作業系統公開的核心事件,目前在其他系統上不可用。
如果該值在指定時沒有單位,則視為毫秒。預設值為 0
,這會停用連線檢查。如果沒有連線檢查,伺服器只會在下次與 socket 互動時(當它等待、接收或傳送資料時)才會偵測到連線遺失。
為了讓核心本身能夠可靠地且在已知時間範圍內偵測到遺失的 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 加密的密碼。有關更多詳細資訊,請參閱 Section 20.5。
scram_iterations
(integer
) #使用 SCRAM-SHA-256 加密密碼時要執行的計算迭代次數。預設值為 4096
。較高的迭代次數可以額外保護儲存的密碼免受暴力破解攻擊,但會使驗證速度變慢。變更此值對使用 SCRAM-SHA-256 加密的現有密碼沒有任何影響,因為迭代次數在加密時是固定的。為了使用變更的值,必須設定一個新密碼。
krb_server_keyfile
(string
) #設定伺服器的 Kerberos 金鑰檔案的位置。預設值為 FILE:/usr/local/pgsql/etc/krb5.keytab
(其中目錄部分是在建置時指定為 sysconfdir
的任何內容;使用 pg_config --sysconfdir
來確定)。如果此參數設定為空字串,則會被忽略,並使用系統預設值。此參數只能在 postgresql.conf
檔案或伺服器命令列上設定。有關更多資訊,請參閱 Section 20.6。
krb_caseins_users
(boolean
) #設定 GSSAPI 使用者名稱是否應區分大小寫。預設值為 off
(區分大小寫)。此參數只能在 postgresql.conf
檔案或伺服器命令列上設定。
gss_accept_delegation
(boolean
) #設定是否應接受來自客戶端的 GSSAPI 委派。預設值為 off
,表示不會接受來自客戶端的認證。將其變更為 on
將使伺服器接受從客戶端委派給它的認證。此參數只能在 postgresql.conf
檔案或伺服器命令列上設定。
關於設定的更多資訊,請參閱第 18.9 節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_ciphers
(string
) #指定允許 SSL 連線使用的SSL加密套件清單。有關此設定的語法和支援值的清單,請參閱 OpenSSL 套件中的 ciphers 手冊頁。只有使用 TLS 1.2 及更低版本的連線才會受到影響。目前沒有設定可以控制 TLS 1.3 連線使用的加密選擇。預設值為 HIGH:MEDIUM:+3DES:!aNULL
。除非您有特定的安全性需求,否則預設值通常是一個合理的選擇。
此參數只能在 postgresql.conf
檔案中或在伺服器命令列上設定。
預設值說明
可用的加密套件詳細資訊將因 OpenSSL 版本而異。使用命令 openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL'
來查看目前已安裝的 OpenSSL 版本的實際詳細資訊。請注意,此清單會在執行時根據伺服器金鑰類型進行篩選。
ssl_prefer_server_ciphers
(boolean
) #指定是否使用伺服器的 SSL 加密偏好設定,而不是用戶端的。此參數只能在 postgresql.conf
檔案中或在伺服器命令列上設定。預設值為 on
。
9.4 之前的 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使用。
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 系列 SSL 密碼的 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
設定的密碼命令,如果金鑰檔案需要密碼。如果此參數關閉(預設),則在重新載入期間將忽略 ssl_passphrase_command
,並且如果需要密碼,則不會重新載入 SSL 配置。此設定適用於需要 TTY 進行提示的命令,當伺服器正在執行時可能無法使用。如果從檔案中取得密碼,則將此參數設定為開啟可能適用。
此參數只能在 postgresql.conf
檔案中或在伺服器命令列上設定。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的地方,請使用此表格來報告文件問題。