中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PostgreSQL數據庫中查看默認權限

發布時間:2021-01-04 14:16:04 來源:億速云 閱讀:580 作者:Leah 欄目:開發技術

怎么在PostgreSQL數據庫中查看默認權限?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

如何查看PostgreSQL默認權限

當我們對Postgresql的某個用戶授予默認權限時, pg_default_acl表存儲要被分配給新創建對象的初始權限。你可能通過查詢該表獲取默認權限,先了解下官方文檔的解釋:

表 50-17. pg_default_acl的列:

名稱類型引用描述
oidoid
行標識符(隱藏屬性,必須被顯式選擇才會顯示)
defaclroleoidpg_authid.oid與此項相關的角色的OID
defaclnamespaceoidpg_namespace.oid與此項相關的名字空間的OID,如果沒有則為0
defaclobjtypechar
此項適合的對象類型: r = 關系(表、視圖), S = 序列, f = 函數, T = 類型
defaclaclaclitem[]
此類對象在創建時應用有的訪問權限

一個pg_default_acl項展示了要分配給屬于一個指定用戶的對象的初始權限。當前有兩類項:defaclnamespace = 0的"全局"項和引用一個特殊模式的"每模式"項。如果一個全局項存在,則它重載該對象類型的普通hard-wired默認權限。一個每模式項如果存在,表示權限將被加入到全局或hard-wired默認權限中。

添加默認權限

演示數據庫版本:PostgreSQL 9.6.8

這里我們測試給test用戶添加“abc”模式的默認權限,先查看下當前schema的所有者:

// 查看當前schema的所有者,相當于\du元命令
SELECT n.nspname AS "Name",
 pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM pg_catalog.pg_namespace n
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
ORDER BY 1;

查詢結果如圖所示,模式“abc”的所有者為postgresql用戶

怎么在PostgreSQL數據庫中查看默認權限

針對模式“abc”, 使用超級管理員postgresql給普通用戶test授權,命令如下:

// 最后一條命令就是授予初始權限
grant select on all tables in schema abc to test;
grant usage on schema abc to test;
alter default privileges in schema abc grant select on tables to test;

查看默認權限

授權完成,通過pg_default_acl表查看默認權限

// 查看初始權限
select * from pg_catalog.pg_default_acl;

怎么在PostgreSQL數據庫中查看默認權限

這樣看其實不是很直觀,可以使用下面的SQL來查看:

// 查看初始權限
SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "Granter",
 n.nspname AS "Schema",
 CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' END AS "Type",
 pg_catalog.array_to_string(d.defaclacl, E', ') AS "Access privileges"
FROM pg_catalog.pg_default_acl d
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.defaclnamespace
ORDER BY 1, 2, 3;

輸出結果如下: 表示通過Postgresql超級用戶授予test普通用戶對模式“abc”有讀的權限。

怎么在PostgreSQL數據庫中查看默認權限

在此,我們再把模式“abc”的擁有者(owner)修改為dbadmin用戶(可以事先創建好),執行以下命令:

// 修改模式“abc”擁有者為:dbadmin
ALTER SCHEMA abc OWNER TO "dbadmin";
// 查看模式的擁有者,相當于\du元命令
SELECT n.nspname AS "Name",
 pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"
FROM pg_catalog.pg_namespace n
WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'
ORDER BY 1;

怎么在PostgreSQL數據庫中查看默認權限

現在我們使用dbadmin用戶登錄連接到數據庫,給普通用戶test添加默認權限,其實上面已經通過postgresql超級用戶給test用戶加過默認權限了。 這里演示使用dbadmin用戶再添加一次,目的是演示pg_default_acl表會出現2條記錄,使用dbadmin用戶執行以下命令:

alter default privileges in schema abc grant select on tables to test;

再次查看pg_default_acl表會出現兩行記錄:

怎么在PostgreSQL數據庫中查看默認權限

一行是dbadmin擁有者授予的讀權限。 一行是postgresql超級用戶授權的讀權限。

補充:PostgreSQL基本配置與權限控制

修改PgSQL基本配置:

重要文件和目錄:

配置文件:  postgresql.conf
登錄權限控制文件: pg_hba.conf
數 據 目 錄 : base
運行日志目錄: log
歸檔日志目錄: pg_wal

修改PgSQL偵聽地址:

在單引號內寫入IP地址,如果要偵聽多個IP地址,以逗號分隔

[root@postgrssql ~]# vim /var/lib/pgsql/11/data/postgresql.conf
listen_addresses = 'localhost,172.18.1.76'

修改PgSQL偵聽端口:

默認端口 5432

[root@postgrssql ~]# vim /var/lib/pgsql/11/data/postgresql.conf
port = 5432

修改PgSQL最大連接數:

修改連接數需要重啟,對比MySQL一般設置 512 ~ 1024

[root@postgrssql ~]# vim /var/lib/pgsql/11/data/postgresql.conf
max_connections = 100

打開PgSQL復制日志:

類似于MySQL binlog,復制到從庫并應用一遍日志操作就達到數據同步了

# 是否開啟 archive_log日志功能
archive_mode = on
# 歸檔 archive_log日志要執行的命令,當前不準備歸檔就執行 cd命令
archive_command = 'cd .' 
[root@postgrssql ~]# ll -sh /var/lib/pgsql/11/data/pg_wal
total 16M
M -rw------- 1 postgres postgres 16M Nov 23 20:47 000000010000000000000001
 0 drwx------ 2 postgres postgres 6 Nov 22 15:21 archive_status

PgSQL用戶權限控制:

在數據庫中創建對象時,都會為其分配所有者。 所有者通常是執行創建語句的用戶。 對于大多數類型的對象,初始狀態是只有所有者(或超級用戶)可以修改或刪除對象。 要允許其他角色或用戶使用它,必須授予權限或權限。

配置超管用戶安全:

默認是 all 所有用戶都擁有peer對等權限,只修改為postgrs用戶擁有peer權限

[root@postgrssql ~]# sed -i '80d' /var/lib/pgsql/11/data/pg_hba.conf
[root@postgrssql ~]# sed -i '79a local all  postgres  peer' /var/lib/pgsql/11/data/pg_hba.conf

創建用戶:

# 創建 olda 用戶
postgres=# create user olda with password '123456';
CREATE ROLE
# 查看所有用戶
postgres=# \du
     List of roles
 Role name |    Attributes    | Member of 
-----------+------------------------------------------------------------+-----------
 olda |        | {}
 postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

用戶授權權限:

# 切換到 course 數據庫
postgres=# \c course
You are now connected to database "course" as user "postgres".
# 在 course 數據庫授權所有表的所有權限到 olda用戶
course=# grant all on all tables in schema public to olda;
GRANT
# 查看 course 數據庫所有表的權限表信息
course=# \dp+
     Access privileges
 Schema | Name | Type | Access privileges | Column privileges | Policies 
--------+----------+-------+---------------------------+-------------------+----------
 public | students | table | postgres=arwdDxt/postgres+|   | 
 |  | | olda=arwdDxt/postgres |   | 
(1 row)

配置用戶連接:

在PgSQL內創建用戶后也是不可以登錄的,需要在pg_hba.conf文件中配置連接源信息,否則不允許遠程登錄。

加入 olda用戶,local本地可以登錄所有庫,登錄密碼驗證方式為md5

[root@postgrssql ~]# vim /var/lib/pgsql/11/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local all  postgres    peer
local all  olda  0.0.0.0/0  md5
# 重載 PostgreSQL
systemctl reload postgresql-11.service
# 測試 olda用戶連接 PgSQL的 course庫
-bash-4.2$ psql -U olda -W course
Password: 
psql (11.6)
Type "help" for help.
course=> \l
     List of databases
 Name | Owner | Encoding | Collate | Ctype | Access privileges 
-----------+----------+----------+-------------+-------------+-----------------------
 course | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | 
 postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres  +
  |  |  |  |  | postgres=CTc/postgres
 template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres  +
  |  |  |  |  | postgres=CTc/postgres
(4 rows)

配置默認權限:

意思為 postgres用戶創建的所有表都默認對 olda用戶重新授予權限

postgres=# alter default privileges for role postgres grant all on tables to olda;
ALTER DEFAULT PRIVILEGES

配置用戶遠程連接:

默認在pg_hba.conf文件中加入密碼驗證方式還是不可以遠程訪問,因為是 local方式。
加入 olda用戶,host方式,所有來源IP都可以登錄所有庫,登錄密碼驗證方式為md5
-bash-4.2$ psql -U olda -W -h 172.18.1.76 -p 5432 course
Password: 
psql: FATAL: no pg_hba.conf entry for host "172.18.1.76", user "olda", database "course", SSL off
[root@postgrssql ~]# vim /var/lib/pgsql/11/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local all  postgres    peer
local all  olda     md5
host all  olda  0.0.0.0/0  md5
# 重載 PostgreSQL
[root@postgrssql ~]# systemctl reload postgresql-11.service
# 測試是否可以遠程連接到 PostgreSQL
-bash-4.2$ psql -U olda -W -h 172.18.1.76 -p 5432 course
Password: 
psql (11.6)
Type "help" for help.
course=>

關于怎么在PostgreSQL數據庫中查看默認權限問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

焉耆| 丹凤县| 长沙市| 湄潭县| 习水县| 乐陵市| 利川市| 宿州市| 海伦市| 泽库县| 南安市| 中超| 磐石市| 江油市| 和田县| 高碑店市| 广宁县| 海丰县| 温宿县| 东乡族自治县| 南宁市| 泰和县| 罗源县| 嘉鱼县| 广丰县| 辽宁省| 西盟| 沅江市| 正阳县| 呼伦贝尔市| 东丰县| 娱乐| 云霄县| 甘孜| 濮阳市| 密云县| 北流市| 正蓝旗| 丹江口市| 崇文区| 睢宁县|