最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Postgresql 數(shù)據(jù)庫權限功能的使用總結

 更新時間:2021年02月05日 10:12:49   作者:arcticJian  
這篇文章主要介紹了Postgresql 數(shù)據(jù)庫權限功能的使用總結,具有很好的參考價值,對大家有所幫助。一起跟隨小編過來看看吧

Postgresql數(shù)據(jù)庫支持靈活的權限管理,可以控制一個角色(組、用戶)對某張表的讀、寫、更新、刪除等操作權限、執(zhí)行某個函數(shù)的權限以及操作(使用、更新等)視圖、序列的權限。

PG的權限管理功能比較強大,可以細化到對一張表的各個字段,比如禁止用戶訪問一張表里的密碼字段等,在稍后的內容中給出詳細的解釋。

雖然在PG數(shù)據(jù)庫中把用戶、角色統(tǒng)一叫做角色,甚至創(chuàng)建語句都為create role XXX,但用戶和角色之間仍有一定的區(qū)別。在這里我們統(tǒng)一把擁有登錄權限的叫做用戶,沒有登錄權限的叫做角色,用此方式加以區(qū)分。

實際上,在PgAdmin管理工具中,可以看到用戶和角色的區(qū)別,沒有登錄權限的被放在組角色下,有登錄權限的被放在登錄角色下。

基本權限

用戶和角色都可以被賦予基本權限,比如創(chuàng)建數(shù)據(jù)庫權限、超級用戶權限、創(chuàng)建角色權限等。

比如創(chuàng)建用戶的語句為:

CREATE ROLE guest LOGIN
 NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

注意上述Role guest擁有LOGIN的權限,所以叫它用戶。

創(chuàng)建角色的語句為:

CREATE ROLE "group"
 NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

注意這里沒有LOGIN權限,所以是角色。

上述角色和用戶的創(chuàng)建語句中,都沒有賦予超級用戶、創(chuàng)建數(shù)據(jù)庫等權限。

操作數(shù)據(jù)庫對象權限

只能把數(shù)據(jù)庫對象的操作權限賦予沒有登錄權限的角色,而不能直接賦予擁有登錄權限的用戶。

那么這樣就帶來一個問題,怎么樣控制登錄用戶操作數(shù)據(jù)庫對象的權限呢?

答案是讓用戶成為角色的成員,此時用戶即可擁有角色的權限,進一步限制了登錄用戶操作數(shù)據(jù)庫對象的權限。

如把上述角色group賦予guest用戶:

GRANT "group" TO guest;

之后,guest用戶就擁有了group角色所擁有的數(shù)據(jù)庫對象權限。

比如控制group角色只能對class表執(zhí)行Insert操作:

GRANT INSERT ON TABLE class TO "group";

此時使用guest用戶登錄數(shù)據(jù)后,就只能對表class執(zhí)行insert操作,無法執(zhí)行delete、update等操作。

示例代碼如下,使用guest用戶登錄,訪問TEST數(shù)據(jù)庫下的class表。

Server [localhost]:
Database [postgres]:
Port [5433]:
Username [postgres]: guest
用戶 guest 的口令:
psql (9.4.5)
輸入 "help" 來獲取幫助信息.
postgres=> \c TEST
您現(xiàn)在已經連線到數(shù)據(jù)庫 "TEST",用戶 "guest".
TEST=> select * from class;
ERROR: permission denied for relation class
TEST=> insert into class values(2,'class1');
INSERT 0 1

從上述結果中可以看到,guest用戶沒有權限查詢class表,但是可以插入數(shù)據(jù)庫。原因就是只對group角色賦予了class表的insert權限,然后guest用戶也就只有class表的insert權限。

前面說到PG的權限管理可以細化到表的某個字段,現(xiàn)在繼續(xù)用class表和guest用戶做實驗。

TEST=> \c postgres postgres;
您現(xiàn)在已經連線到數(shù)據(jù)庫 "postgres",用戶 "postgres".
postgres=# \c TEST;
您現(xiàn)在已經連線到數(shù)據(jù)庫 "TEST",用戶 "postgres".
TEST=# grant select(num) on class to "group";
GRANT
TEST=# \echo 切換到postgres用戶連接TEST數(shù)據(jù)庫,對class表的num字段的select權限賦予group角色
切換到postgres用戶連接TEST數(shù)據(jù)庫,對class表的num字段的select權限賦予group角色
TEST=# \c TEST guest
用戶 guest 的口令:
您現(xiàn)在已經連線到數(shù)據(jù)庫 "TEST",用戶 "guest".
TEST=> \echo 切換回guest用戶登錄TEST數(shù)據(jù)庫
切換回guest用戶登錄TEST數(shù)據(jù)庫
TEST=> select * from class;
ERROR: permission denied for relation class
TEST=> select num from class;
 num
-----
  1
  2
(2 行記錄)

從上述結果中可以看到,guest用戶依然沒有查詢class表的權限,但是卻有了查詢class表里的num字段的權限。

在PG數(shù)據(jù)庫中不單單可以控制操作表的權限,其他數(shù)據(jù)庫對象,比如序列、函數(shù)、視圖等都可以控制。

所以PG的權限控制功能非常強大。

補充:Postgres用戶對數(shù)據(jù)庫的權限

用戶對數(shù)據(jù)庫的權限(登錄、超級用戶權限)

(1)查看當前數(shù)據(jù)庫中有用戶highgo和用戶a

highgo=#\du
               List of roles
 Role name |          Attributes          | Member of
-----------+------------------------------------------------+-----------
 a     |                        | {}
 highgo  | Superuser, Create role, Create DB, Replication | {}

(2)查看確認當前連接的用戶為超級用戶highgo,且該用戶后創(chuàng)建角色和數(shù)據(jù)庫的權限等

highgo=#select current_user;
 current_user
--------------
 highgo
(1row)

(3)查看當前集群中的數(shù)據(jù)庫

highgo=#\l
               List of databases
  Name  | Owner | Encoding | Collate |  Ctype  | Access privileges
-----------+--------+----------+------------+------------+-------------------
 highgo  | highgo | UTF8   | zh_CN.utf8 |zh_CN.utf8 |
 template0 | highgo | UTF8   | zh_CN.utf8 | zh_CN.utf8 | =c/highgo    +
      |    |     |      |      | highgo=CTc/highgo
 template1 | highgo | UTF8   | zh_CN.utf8 | zh_CN.utf8 | =c/highgo    +
      |    |     |      |      | highgo=CTc/highgo
(3rows)

(4)使用普通用戶a連接數(shù)據(jù)庫正常

highgo=#\c highgo a
Youare now connected to database "highgo" as user "a".
highgo=>select current_user;
 current_user
--------------
 a
(1row)
(5)使用超級用戶highgo連接數(shù)據(jù)庫正常
highgo=>\c highgo highgo
Youare now connected to database "highgo" as user "highgo".
highgo=#select current_user;
 current_user
--------------
 highgo
(1row)

(6)在超級用戶連接highgo后,設置不允許普通用戶a連接數(shù)據(jù)庫

highgo=#alter role a nologin;
ALTER ROLE
highgo=#\c highgo a
致命錯誤: 不允許角色"a" 進行登錄
Previousconnection kept
highgo=#

(7)在超級用戶連接highgo后,設置不允許普通用戶a連接數(shù)據(jù)庫后,賦予用戶a超級用戶權限后仍然無法連接數(shù)據(jù)庫

highgo=#alter role a superuser;
ALTERROLE
highgo=#\du
               List of roles
 Role name |          Attributes          | Member of
-----------+------------------------------------------------+-----------
 a    | Superuser, Cannot login            | {}
 highgo  | Superuser, Create role, Create DB, Replication | {}
 
highgo=#\c highgo a
致命錯誤: 不允許角色"a" 進行登錄
Previousconnection kept

(8)將登錄數(shù)據(jù)庫的權限賦予用戶a后,用戶a可登錄數(shù)據(jù)庫

highgo=#alter role a login;
ALTERROLE
highgo=#\c highgo a
Youare now connected to database "highgo" as user "a".
highgo=#select current_user;
 current_user
--------------
 a
(1row)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • PostgreSQL因大量并發(fā)插入導致的主鍵沖突的解決方案

    PostgreSQL因大量并發(fā)插入導致的主鍵沖突的解決方案

    在數(shù)據(jù)庫操作中,并發(fā)插入是一個常見的場景,然而,當大量并發(fā)插入操作同時進行時,可能會遇到主鍵沖突的問題,本文將深入探討 PostgreSQL 中解決因大量并發(fā)插入導致的主鍵沖突的方法,并通過具體的示例進行詳細說明,需要的朋友可以參考下
    2024-07-07
  • PostgreSQL 啟動失敗的解決方案

    PostgreSQL 啟動失敗的解決方案

    這篇文章主要介紹了PostgreSQL 啟動失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL實現(xiàn)透視表查詢的方法詳解

    PostgreSQL實現(xiàn)透視表查詢的方法詳解

    PostgreSQL 8.3版本發(fā)布時,引入了一個名為tablefunc的新擴展,這個擴展提供了一組非常有趣的函數(shù),其中之一是交叉表函數(shù),用于創(chuàng)建數(shù)據(jù)透視表,這就是我們將在本文中討論的內容,本文給大家介紹了PostgreSQL實現(xiàn)透視表查詢的方法,需要的朋友可以參考下
    2024-12-12
  • PostgreSQL 中的單引號與雙引號用法說明

    PostgreSQL 中的單引號與雙引號用法說明

    這篇文章主要介紹了PostgreSQL 中的單引號與雙引號用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • postgresql高級應用之合并單元格的思路詳解

    postgresql高級應用之合并單元格的思路詳解

    這篇文章主要介紹了postgresql高級應用之合并單元格,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • postgresql關于like%xxx%的優(yōu)化操作

    postgresql關于like%xxx%的優(yōu)化操作

    這篇文章主要介紹了postgresql關于like%xxx%的優(yōu)化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgres 實現(xiàn)查詢某條數(shù)據(jù)的排名

    postgres 實現(xiàn)查詢某條數(shù)據(jù)的排名

    這篇文章主要介紹了postgres 實現(xiàn)查詢某條數(shù)據(jù)的排名,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 淺談Postgresql默認端口5432你所不知道的一點

    淺談Postgresql默認端口5432你所不知道的一點

    這篇文章主要介紹了淺談Postgresql默認端口5432你所不知道的一點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Ubuntu PostgreSQL安裝和配置的介紹

    Ubuntu PostgreSQL安裝和配置的介紹

    今天小編就為大家分享一篇關于Ubuntu PostgreSQL安裝和配置的介紹,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • PostgreSQL pg_archivecleanup與清理archivelog的操作

    PostgreSQL pg_archivecleanup與清理archivelog的操作

    這篇文章主要介紹了PostgreSQL pg_archivecleanup與清理archivelog的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

石河子市| 那坡县| 奎屯市| 玉林市| 鹤岗市| 富川| 济宁市| 咸丰县| 托克托县| 琼结县| 靖州| 岚皋县| 惠水县| 喀喇沁旗| 鱼台县| 秦安县| 金溪县| 曲阳县| 汉源县| 赤壁市| 子洲县| 罗源县| 全南县| 周至县| 肇源县| 保定市| 扶沟县| 安顺市| 上饶县| 晴隆县| 淮滨县| 苍梧县| 兴文县| 合江县| 泰顺县| 黄冈市| 安图县| 滨州市| 玉溪市| 新和县| 麦盖提县|