詳解PG三大配置文件-postgresql.conf,pg_hba.conf,pg_ident.conf

2019-11-19     波波說運維

概述

今天主要介紹PG的三大配置文件,下面一起來看看吧!


一、pg_settings

The view pg_settings provides access to run-time parameters of the server. It is essentially an alternative interface to the SHOW and SET commands. It also provides access to some facts about each parameter that are not directly available from SHOW, such as minimum and maximum values.

PostgreSQL的配置文件主要有如下3個(postgresql.conf,pg_hba.conf,pg_ident.conf)

 select name, setting,source from pg_settings where category='File Locations' ;


二、postgresql.conf(資料庫相關配置)


該文件包含一些通用設置,比如內存分配,新建database的默認存儲位置,PostgreSQL伺服器的IP位址,日誌的位置以及許多其他設置。

 select name, context, unit, setting, boot_val, reset_val from pg_settings where name in ('listen_address','max_connetctons','shared_buffers','effective_cache_size','work_mem','maintenance_work_mem') order by context, name;​

說明:context 設置為postmaster,更改此形參後需要重啟PostgreSQL服務才能生效;設置為user,那麼只需要執行一次重新加載即可全局生效。重啟資料庫服務會終止活動連接,但重新加載不會。

unit 欄位表示這些設置的單位;
setting是指當前設置;

boot_val是指默認設置;

reset_val是指重新啟動伺服器或重新加載設置之後的新設置;
在postgresql.conf中修改了設置後,一定記得查看一下setting和reset_val並確保二者是一致,否則說明設置並未生效,需要重新啟動伺服器或者重新加載設置


三、pg_hba.conf(客戶端認證配置文件)

pg_hba.conf為PostgreSQL的訪問策略配置文件,默認位於/var/lib/pgsql/10/data/目錄(PostgreSQL10)。

該配置文件有5個參數,分別為:TYPE(主機類型)、DATABASE(資料庫名)、USER(用戶名)、ADDRESS(IP位址和掩碼)、METHOD(加密方法)

1、TYPE,有4個值

local:使用Unix-domainsocket
host:使用TCP/IP連接,可以是SSL的,也可以不是
hostssl:必須是SSL的
hostnossl:必須是非SSL的

2、DATABASE:

資料庫名,可以是"all", "sameuser", "samerole", "replication"。all表示所有,但不包括replication。多個資料庫用「,」隔開。

3、USER:

用戶名,可以為"all",表示所有,也可以具體指定一個用戶。多個用戶用「,」隔開。和DATABASE一樣,也可以將配置放到文件中,文件名加上前綴@

4、ADDRESS:

可以是為一個主機名,或者由IP位址和CIDR掩碼組成。掩碼可以為0-32(IPv4)或者0-128(IPv6)間的一個整數,32表示子網掩碼為255.255.255.255,24表示子網掩碼為255.255.255.0。主機名以「.」開頭。samehost可以匹配所有主機、samenet可以匹配同一個掩碼內的所有主機。

例:192.168.10.122/32表示單一主機,192.168.10.0/24表示192.168.0.1~192.168.0.255網段內所有主機,0.0.0.0/0表示所有主機。

5、METHOD:

密碼加密策略,password表示以明文方式發送密碼,md5和scram-sha-256會以對應的方式加密再發送密碼。


四、pg_ident.conf(用戶映射文件)

前面pg_hba.conf講到ident認證方式,需要建立映射用戶或具備同名用戶。

同名用戶好辦,各新建一個同名的作業系統用戶和資料庫用戶,兩個用戶密碼不必相同,但名字必須相同。用該用戶登錄到作業系統或su到該用戶後,即可$ psql dbname。

如果不想新建同名用戶,也可以配置pg_ident.conf文件。pg_ident.conf用來配置哪些作業系統用戶可以映射為資料庫用戶。

pg_ident.conf的格式如下:

# MAPNAME SYSTEM-USERNAME PG-USERNAME
usermap username dbuser

usermap為映射名,要在pg_hba.conf中用到,多個映射可以共用同一個映射名,username為作業系統用戶名,dbuser為映射到的資料庫用戶。
比如,伺服器上有名為user1的作業系統用戶,同時資料庫上也有同名的資料庫用戶,user1登錄作業系統後可以直接輸入psql,以user1資料庫用戶身份登錄資料庫且不需密碼。
很多初學者都會遇到psql -U username登錄資料庫卻出現「username ident 認證失敗」的錯誤,明明資料庫用戶已經createuser。
原因就在於此,使用了ident認證方式,卻沒有同名的作業系統用戶或沒有相應的映射用戶。
解決方案:

1)、在pg_ident.conf中添加映射用戶;
2)、改變認證方式。

CentOS7安裝了PostgreSQL10和pgadmin4後,pgadmin4始終登陸資料庫提示用戶認證失敗,
就是因為Linux下PostgreSQL默認的local認證方式是ident,而pg_ident.conf用戶映射文件里並沒有任何映射用戶,所以可以修改認證方式為md5,即可使用密碼成功登陸了.


覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~

文章來源: https://twgreatdaily.com/zh/eMzWgG4BMH2_cNUgGySk.html