PostgreSQL本地

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為*,如下圖所示:

PostgreSQL本地/遠程登陸配置

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。如下圖所示:

PostgreSQL本地/遠程登陸配置

3. 重啟PostgreSQL服務

systemctl restart postgresql-9.6.service

4. 通過Navicat連接

  • 連接的數據庫選擇剛創建的demo
  • 用戶名選擇剛創建的用戶tom
  • 對應的密碼為123456
PostgreSQL本地/遠程登陸配置

轉換為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文件同級目錄。其基本格式如下:

PostgreSQL本地/遠程登陸配置

  • MAPNAME指的是映射的名稱,比如map_tom
  • SYSTEM-USERNAME就是系統用戶的名稱,比如root
  • PG-USERNAME就是數據庫裡存在的用戶名稱,比如tom

上面定義的map意思是:定義了一個叫做map_tom的映射,當客戶端用戶是root的時候,允許它用tom用戶來登陸PostgreSQL。

修改pg_hba.conf文件

在peer的認證方式後面添加:map=map_tom

PostgreSQL本地/遠程登陸配置

重啟PostgreSQL服務,再次嘗試,連接成功。

2. 方法二:修改認證方式

需要修改一下pg_hba.cong文件,將local all all peer修改為local all all md5,如下圖所示:

PostgreSQL本地/遠程登陸配置

重啟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--

碼字不易,如果您覺得文章寫得不錯,請關注作者~ 您的關注是我寫作的最大動力

友情提示:原文排版精美,可點擊分享鏈接查看。


分享到:


相關文章: