PostgreSQL的配置文件主要有如下3個(postgresql.conf,pg_hba.conf,pg_ident.conf)
可以通過如下方式查找:
postgres=# select name, setting from pg_settings where category='File Locations' ;
name | setting
-------------------+----------------------------------------
config_file | /var/lib/pgsql/10/data/postgresql.conf
data_directory | /var/lib/pgsql/10/data
external_pid_file |
hba_file | /var/lib/pgsql/10/data/pg_hba.conf
ident_file | /var/lib/pgsql/10/data/pg_ident.conf
(5 rows)
也可以使用find查找:若普通用戶在Linux的文件夾下查找,可能會找不到,因為權限不足.可以通過root使用find查找.
[root@srv /]# find / -name pg_hba.conf
/var/lib/pgsql/10/data/pg_hba.conf
===1=== postgresql.conf 數據庫相關配置
該文件包含一些通用設置,比如內存分配,新建database的默認存儲位置,PostgreSQL服務器的IP地址,日志的位置以及許多其他設置。
postgres=# 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;
name | context | unit | setting | boot_val | reset_val
----------------------+------------+------+---------+----------+-----------
shared_buffers | postmaster | 8kB | 16384 | 1024 | 16384
effective_cache_size | user | 8kB | 524288 | 524288 | 524288
maintenance_work_mem | user | kB | 65536 | 65536 | 65536
work_mem | user | kB | 4096 | 4096 | 4096
(4 rows)
context 設置為postmaster,更改此形參后需要重啟PostgreSQL服務才能生效;
設置為user,那么只需要執行一次重新加載即可全局生效。重啟數據庫服務會終止活動連接,但重新加載不會。
unit 字段表示這些設置的單位;
setting是指當前設置;boot_val是指默認設置;reset_val是指重新啟動服務器或重新加載設置之后的新設置;
在postgresql.conf中修改了設置后,一定記得查看一下setting和reset_val並確保二者是一致,否則說明設置並未生效,需要重新啟動服務器或者重新加載設置
===2=== pg_hba.conf 客戶端認證配置文件
允許哪些用戶連接到哪個數據庫,允許哪些IP或者哪個網段的IP連接到本服務器,以及指定連接時使用的身份驗證模式
pg_hba.conf 客戶端認證配置文件的認證類型包括:
> trust 本地可以使用 psql -U postgres 直接登錄服務器; (生產環境勿用)
> peer 本地可以使用 psql -h 127.0.0.1 -d postgres -U postgres 直接登錄服務器; (peer使用發起端的操作系統名進行身份驗證)
> password 使用 用戶名密碼(明文密碼) 登錄 ; (生產環境勿用)
> ident ident是Linux下PostgreSQL默認的local認證方式,凡是能正確登錄服務器的操作系統用戶(注:不是數據庫用戶)就能使用本用戶映射的數據庫用戶不需密碼登錄數據庫。
> md5 md5是常用的密碼認證方式,如果你不使用ident,最好使用md5。密碼是以md5形式傳送給數據庫,較安全,且不需建立同名的操作系統用戶
> reject 拒絕認證
建議使用md5方式,不同用戶相同密碼加密的結果也不相同,因為會使用用戶名和密碼一同加密. 所以要注意:若已設密碼的用戶名稱改變了,密碼也會失效...
Ident和peer模式適用於Linux,Unix和Mac,不適用於windwos
===3=== pg_ident.conf 用戶映射文件 若客戶端使用ident類型認證,就需要這里的映射關系了.
比如,服務器上有名為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.cong用戶映射文件里並沒有任何映射用戶,
所以可以修改認證方式為md5,即可使用密碼成功登陸了.
===========================
https://www.cnblogs.com/hiloves/archive/2011/08/20/2147043.html
https://pylixm.cc/posts/2017-11-05-postgresql-install.html
https://blog.csdn.net/mbshqqb/article/details/78622167
https://yq.aliyun.com/articles/79330
http://blog.51cto.com/corasql/1910485
http://axiaoxin.com/article/121/