PostgreSQL遠程連接配置管理/賬號密碼分配(解決:致命錯誤: 用戶 "postgres" Ident 認證失敗)
問題:致命錯誤: 用戶 "postgres" Ident 認證失敗
說明:這個是由於沒有配置遠程訪問且認證方式沒改造成的,只需要更改使用賬號密碼認證即可。
解決:找到pg_hba.conf(find / -name pg_hba.conf),METHOD的ident修改為md5,且把ip端改為0.0.0.0/0,或者想要的IP地址即可。修改完成後直接reload即可。
特別吐槽:網上說直接trust,其實這個意思是只驗證用戶名,不驗證密碼!千萬不要這樣使用!!!
METHOD指定如何處理客戶端的認證。常用的有ident,md5,password,trust,reject
ident是Linux下PostgreSQL默認的local認證方式,凡是能正確登錄服務器的操作系統用戶(註:不是數據庫用戶)就能使用本用戶映射的數據庫用戶不需密碼登錄數據庫。用戶映射文件為pg_ident.conf,這個文件記錄著與操作系統用戶匹配的數據庫用戶,如果某操作系統用戶在本文件中沒有映射用戶,則默認的映射數據庫用戶與操作系統用戶同名。比如,服務器上有名為user1的操作系統用戶,同時數據庫上也有同名的數據庫用戶,user1登錄操作系統後可以直接輸入psql,以user1數據庫用戶身份登錄數據庫且不需密碼。很多初學者都會遇到psql -U username登錄數據庫卻出現“username ident 認證失敗”的錯誤,明明數據庫用戶已經createuser。原因就在於此,使用了ident認證方式,卻沒有同名的操作系統用戶或沒有相應的映射用戶。解決方案:1、在pg_ident.conf中添加映射用戶;2、改變認證方式。
md5是常用的密碼認證方式,如果你不使用ident,最好使用md5。密碼是以md5形式傳送給數據庫,較安全,且不需建立同名的操作系統用戶。
password是以明文密碼傳送給數據庫,建議不要在生產環境中使用。
trust是只要知道數據庫用戶名就不需要密碼或ident就能登錄,建議不要在生產環境中使用。
reject是拒絕認證。
在文件查找 listen_addresses,他的值說明
如果希望只能從本地計算機訪問PostgreSQL數據庫,就將該項設置為‘localhost‘;
如果希望從局域網訪問PostgreSQL數據庫,就將該項設置為PostgreSQL數據庫的局域網IP地址;如果希望從互聯網訪問PostgreSQL數據庫,就將該項設置為PostgreSQL數據庫的互聯網IP地址;
如果希望從任何地方都可以訪問PostgreSQL數據庫,就將該配置項設置為“*”;
創建用戶:
# 先創建數據庫用戶dbuser
postgres=# create user dbuser with password ‘密碼‘;
# 創建系統用戶
adduser dbuser
# 修改系統用戶密碼
passwd dbuser
修改dbuser的密碼:
# 切換用戶為postgre su postgres # 登錄 psql# 修改dbuser的密碼 postgres=# alter user dbuser with password ‘自己的password‘;
# 或者
postgres=# \password dbuser
給dbuser分配數據庫權限:
# 創建數據庫時分配 postgres=# create database 數據庫名稱 owner dbuser; # 創建數據庫後賦予用戶postgres權限 postgres=# grant all privileges on database 數據庫名稱 to dbuser;
以dbuser的身份連接數據庫:
su dbuser
psql -d 數據庫名
參考:
https://blog.csdn.net/pipi0714/article/details/46047483
http://www.ruanyifeng.com/blog/2013/12/getting_started_with_postgresql.html
PostgreSQL遠程連接配置管理/賬號密碼分配(解決:致命錯誤: 用戶 "postgres" Ident 認證失敗)