PostgreSQL版本:9.6.12
關於PostgreSQL與PostGIS使用,可參考 。本篇文章主要介紹如何實現本地與遠程登陸,並對其認證方式進行總結。
一、查詢當前數據庫、當前用戶
1. 查詢當前數據庫
終端:\c
sql語句:select current_database();
2. 查詢當前用戶
終端:\c
sql語句:select user; 或者:select current_user;
二、創建新用戶來訪問PostgreSQL
先切換到Linux用戶postgres,並執行psql:
[root@node71 ~]# su postgres
bash-4.2$ psql
could not change directory to "/root": Permission denied
psql (9.6.12)
Type "help" for help.
postgres=#
目前位於數據庫postgres下。創建tom用戶。對於PostgreSQL,用戶tom相當於是一種role(角色):
CREATE USER tom WITH PASSWORD '123456';
注意:
語句要以分號結尾。密碼要用單引號括起來。若修改用戶名的密碼,將CREATE修改為ALTER。創建數據庫,如demo:
CREATE DATABASE demo OWNER tom;
將demo數據庫的所有權限都賦予tom用戶:
GRANT ALL PRIVILEGES ON DATABASE demo TO tom;
查看數據庫的所有者:
\l [database]
修改數據庫的所有者,將數據庫demo的所有者變為用戶testdbuser:
ALTER DATABASE demo OWNER TO testdbuser;
三、遠程登陸
修改PostgreSQL的配置文件:
1. postgresql.conf
vim /var/lib/pgsql/9.6/data/postgresql.conf
修改listen_addresses為*,如下圖所示:
2. pg_hba.conf
vim /var/lib/pgsql/9.6/data/pg_hba.conf
將host all all 0.0.0.0/0 md5添加到文件中,代表所有的用戶通過任意ip都可以通過md5(密碼)的方式登陸PostgreSQL。如下圖所示:
3. 重啟PostgreSQL服務
systemctl restart postgresql-9.6.service
4. 通過Navicat連接
連接的數據庫選擇剛創建的demo用戶名選擇剛創建的用戶tom對應的密碼為123456轉換為sql語句就是:
[root@node73 data]# psql -U tom -d demo -h 10.6.6.71 -p 5432
Password for user tom:
命令行的各個參數解釋說明:
-U username 用戶名,默認值postgres-d dbname 要連接的數據庫名,默認值postgres。如果單指定-U,沒指定-d參數,則默認訪問與用戶名名稱相同的數據庫。-h hostname 主機名,默認值localhost-p port 端口號,默認值5432四、本地登陸
[root@node72 data]# psql -U tom -d demo -p 5432
psql: FATAL: Peer authentication failed for user "tom"
PostgreSQL登陸默認是peer,不需要驗證用戶密碼即可進入postgresql相關數據庫,但前提是必須切換用戶登陸。類似於最開始執行的su postgres;psql一樣。
如果必須按照上述登陸方式登陸的話,有兩種修改方式:
增添map映射修改認證方式1. 方法一:增添map映射
什麼叫做map映射呢?map映射是用來將系統用戶映射到對應的postgres數據庫用戶,用來限制指定的用戶使用指定的賬號來登陸。
修改pg_ident.conf文件
修改pg_ident.conf文件,與pg_hba.conf文件同級目錄。其基本格式如下:
上面定義的map意思是:定義了一個叫做map_tom的映射,當客戶端用戶是root的時候,允許它用tom用戶來登陸PostgreSQL。
修改pg_hba.conf文件
在peer的認證方式後面添加:map=map_tom
重啟PostgreSQL服務,再次嘗試,連接成功。
2. 方法二:修改認證方式
需要修改一下pg_hba.cong文件,將local all all peer修改為local all all md5,如下圖所示:
重啟postgresql數據庫,再次嘗試,連接成功。
五、PostgreSQL的認證方式
接下來說說PostgreSQL的認證方式,以下是我自己的理解:
peer:不需要驗證用戶密碼即可進入postgresql相關數據庫,但前提是必須切換用戶登陸。md5:需要校驗密碼。trust:不需要校驗密碼,信任所有連接。更多的認證方式,請看官方資料:http://www.postgres.cn/docs/9.6/auth-pg-hba-conf.html
六、總結
PostgreSQL的連接命令psql有兩種連接方式。
不帶-h參數時,屬於本地登陸,以unix或者linux系統的socket方式連接,用的是peer認證方式。可以使用map映射的方法來通過peer認證。但是如果使用-h localhost、-h 127.0.0.1這樣的格式,屬於遠程登陸,以TCP/IP的方式連接,使用的是ident的認證方式。如果感覺這樣認證麻煩,可以使用md5或trust的認證方式。
--END--
碼字不易,如果您覺得文章寫得不錯,請關注作者~ 您的關注是我寫作的最大動力
友情提示:原文排版精美,可點擊分享鏈接查看。