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

溫馨提示×

溫馨提示×

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

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

如何使用Postgresql 數據庫權限功能

發布時間:2021-02-05 15:37:35 來源:億速云 閱讀:266 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關如何使用Postgresql 數據庫權限功能,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

基本權限

用戶和角色都可以被賦予基本權限,比如創建數據庫權限、超級用戶權限、創建角色權限等。

比如創建用戶的語句為:

CREATE ROLE guest LOGIN
 NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

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

創建角色的語句為:

CREATE ROLE "group"
 NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

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

上述角色和用戶的創建語句中,都沒有賦予超級用戶、創建數據庫等權限。

操作數據庫對象權限

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

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

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

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

GRANT "group" TO guest;

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

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

GRANT INSERT ON TABLE class TO "group";

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

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

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

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

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

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

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

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

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

補充:Postgres用戶對數據庫的權限

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

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

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

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

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

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

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連接數據庫正常

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

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

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

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

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)將登錄數據庫的權限賦予用戶a后,用戶a可登錄數據庫

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 數據庫權限功能了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

深州市| 和田市| 昂仁县| 洛宁县| 福海县| 象山县| 佛冈县| 惠东县| 云浮市| 沁阳市| 余干县| 顺平县| 墨玉县| 南召县| 吕梁市| 阿克苏市| 遂宁市| 虎林市| 湾仔区| 西安市| 江源县| 鲁甸县| 射阳县| 会宁县| 休宁县| 定南县| 恩施市| 大悟县| 开远市| 瓮安县| 酒泉市| 德昌县| 自治县| 乌恰县| 建水县| 德阳市| 延津县| 新昌县| 霍林郭勒市| 双城市| 承德县|