名稱(chēng) | 類(lèi)型 | 引用 | 描述 |
---|---|---|---|
oid | oid | 行標(biāo)識(shí)符(隱藏屬性,必須被顯式選擇才會(huì)顯示) | |
defaclrole | oid | pg_authid.oid | 與此項(xiàng)相關(guān)的角色的OID |
defaclnamespace | oid | pg_namespace.oid | 與此項(xiàng)相關(guān)的名字空間的OID,如果沒(méi)有則為0 |
defaclobjtype | char | 此項(xiàng)適合的對(duì)象類(lèi)型: r = 關(guān)系(表、視圖), S = 序列, f = 函數(shù), T = 類(lèi)型 | |
defaclacl | aclitem[] | 此類(lèi)對(duì)象在創(chuàng)建時(shí)應(yīng)用有的訪(fǎng)問(wèn)權(quán)限 |
一個(gè)pg_default_acl項(xiàng)展示了要分配給屬于一個(gè)指定用戶(hù)的對(duì)象的初始權(quán)限。當(dāng)前有兩類(lèi)項(xiàng):defaclnamespace = 0的"全局"項(xiàng)和引用一個(gè)特殊模式的"每模式"項(xiàng)。如果一個(gè)全局項(xiàng)存在,則它重載該對(duì)象類(lèi)型的普通hard-wired默認(rèn)權(quán)限。一個(gè)每模式項(xiàng)如果存在,表示權(quán)限將被加入到全局或hard-wired默認(rèn)權(quán)限中。
演示數(shù)據(jù)庫(kù)版本:PostgreSQL 9.6.8
這里我們測(cè)試給test用戶(hù)添加“abc”模式的默認(rèn)權(quán)限,先查看下當(dāng)前schema的所有者:
// 查看當(dāng)前schema的所有者,相當(dāng)于\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;
查詢(xún)結(jié)果如圖所示,模式“abc”的所有者為postgresql用戶(hù)
針對(duì)模式“abc”, 使用超級(jí)管理員postgresql給普通用戶(hù)test授權(quán),命令如下:
// 最后一條命令就是授予初始權(quán)限 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;
授權(quán)完成,通過(guò)pg_default_acl表查看默認(rèn)權(quán)限
// 查看初始權(quán)限 select * from pg_catalog.pg_default_acl;
這樣看其實(shí)不是很直觀(guān),可以使用下面的SQL來(lái)查看:
// 查看初始權(quán)限 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;
輸出結(jié)果如下: 表示通過(guò)Postgresql超級(jí)用戶(hù)授予test普通用戶(hù)對(duì)模式“abc”有讀的權(quán)限。
在此,我們?cè)侔涯J健癮bc”的擁有者(owner)修改為dbadmin用戶(hù)(可以事先創(chuàng)建好),執(zhí)行以下命令:
// 修改模式“abc”擁有者為:dbadmin ALTER SCHEMA abc OWNER TO "dbadmin"; // 查看模式的擁有者,相當(dāng)于\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;
現(xiàn)在我們使用dbadmin用戶(hù)登錄連接到數(shù)據(jù)庫(kù),給普通用戶(hù)test添加默認(rèn)權(quán)限,其實(shí)上面已經(jīng)通過(guò)postgresql超級(jí)用戶(hù)給test用戶(hù)加過(guò)默認(rèn)權(quán)限了。 這里演示使用dbadmin用戶(hù)再添加一次,目的是演示pg_default_acl表會(huì)出現(xiàn)2條記錄,使用dbadmin用戶(hù)執(zhí)行以下命令:
alter default privileges in schema abc grant select on tables to test;
再次查看pg_default_acl表會(huì)出現(xiàn)兩行記錄:
一行是dbadmin擁有者授予的讀權(quán)限。 一行是postgresql超級(jí)用戶(hù)授權(quán)的讀權(quán)限。
補(bǔ)充:PostgreSQL基本配置與權(quán)限控制
重要文件和目錄:
配置文件: postgresql.conf 登錄權(quán)限控制文件: pg_hba.conf 數(shù) 據(jù) 目 錄 : base 運(yùn)行日志目錄: log 歸檔日志目錄: pg_wal
在單引號(hào)內(nèi)寫(xiě)入IP地址,如果要偵聽(tīng)多個(gè)IP地址,以逗號(hào)分隔
[root@postgrssql ~]# vim /var/lib/pgsql/11/data/postgresql.conf listen_addresses = 'localhost,172.18.1.76'
默認(rèn)端口 5432
[root@postgrssql ~]# vim /var/lib/pgsql/11/data/postgresql.conf port = 5432
修改連接數(shù)需要重啟,對(duì)比MySQL一般設(shè)置 512 ~ 1024
[root@postgrssql ~]# vim /var/lib/pgsql/11/data/postgresql.conf max_connections = 100
類(lèi)似于MySQL binlog,復(fù)制到從庫(kù)并應(yīng)用一遍日志操作就達(dá)到數(shù)據(jù)同步了
# 是否開(kāi)啟 archive_log日志功能 archive_mode = on # 歸檔 archive_log日志要執(zhí)行的命令,當(dāng)前不準(zhǔn)備歸檔就執(zhí)行 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
在數(shù)據(jù)庫(kù)中創(chuàng)建對(duì)象時(shí),都會(huì)為其分配所有者。 所有者通常是執(zhí)行創(chuàng)建語(yǔ)句的用戶(hù)。 對(duì)于大多數(shù)類(lèi)型的對(duì)象,初始狀態(tài)是只有所有者(或超級(jí)用戶(hù))可以修改或刪除對(duì)象。 要允許其他角色或用戶(hù)使用它,必須授予權(quán)限或權(quán)限。
默認(rèn)是 all 所有用戶(hù)都擁有peer對(duì)等權(quán)限,只修改為postgrs用戶(hù)擁有peer權(quán)限
[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
# 創(chuàng)建 olda 用戶(hù) postgres=# create user olda with password '123456'; CREATE ROLE # 查看所有用戶(hù) postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- olda | | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
# 切換到 course 數(shù)據(jù)庫(kù) postgres=# \c course You are now connected to database "course" as user "postgres". # 在 course 數(shù)據(jù)庫(kù)授權(quán)所有表的所有權(quán)限到 olda用戶(hù) course=# grant all on all tables in schema public to olda; GRANT # 查看 course 數(shù)據(jù)庫(kù)所有表的權(quán)限表信息 course=# \dp+ Access privileges Schema | Name | Type | Access privileges | Column privileges | Policies --------+----------+-------+---------------------------+-------------------+---------- public | students | table | postgres=arwdDxt/postgres+| | | | | olda=arwdDxt/postgres | | (1 row)
在PgSQL內(nèi)創(chuàng)建用戶(hù)后也是不可以登錄的,需要在pg_hba.conf文件中配置連接源信息,否則不允許遠(yuǎn)程登錄。
加入 olda用戶(hù),local本地可以登錄所有庫(kù),登錄密碼驗(yàn)證方式為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 # 測(cè)試 olda用戶(hù)連接 PgSQL的 course庫(kù) -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用戶(hù)創(chuàng)建的所有表都默認(rèn)對(duì) olda用戶(hù)重新授予權(quán)限
postgres=# alter default privileges for role postgres grant all on tables to olda; ALTER DEFAULT PRIVILEGES
默認(rèn)在pg_hba.conf文件中加入密碼驗(yàn)證方式還是不可以遠(yuǎn)程訪(fǎng)問(wèn),因?yàn)槭?local方式。 加入 olda用戶(hù),host方式,所有來(lái)源IP都可以登錄所有庫(kù),登錄密碼驗(yàn)證方式為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 # 測(cè)試是否可以遠(yuǎn)程連接到 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=>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
標(biāo)簽:晉城 錦州 蚌埠 來(lái)賓 珠海 衡陽(yáng) 烏海 株洲
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL 默認(rèn)權(quán)限查看方式》,本文關(guān)鍵詞 PostgreSQL,默認(rèn),權(quán)限,查看,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。