13.pgsql中的用戶、角色、權限

一、用戶/角色

1.查看原始數據角色

查看命令:

\du

執行結果:

默認只有一個超級用戶,賬號密碼都爲postgres。

2.添加一個角色

添加sql:

-- 添加角色role1
create role role1;

執行效果:

3.pgsql用戶和角色

官方文檔:

PostgreSQL 使用角色的概念管理數據庫訪問權限。根據角色自身的設置不同,一個角色可以看做是一個數據庫用戶,或者一組數據庫用戶。角色可以擁有數據庫對象(比如表)以及可以把這些對象上的權限賦予其它角色,以控制誰擁有訪問哪些對象的權限。另外,我們也可以把一個角色的成員權限賦予其它角色,這樣就允許成員角色使用它被賦予成員權限的角色的權限。

角色的概念替換了"用戶"和"組"。在 PostgreSQL 版本 8.1 之前,用戶和組是獨立類型的記錄,但現在它們只是角色。任何角色都可以是一個用戶、一個組、或者兩者。

個人簡單理解:pgsql的用戶和權限是一樣的,只不過用戶多了一個login權限而已。

測試說明:

創建一個用戶:

使用role1、user1登錄

官方文檔解釋如下:

登錄

只有具有 LOGIN 屬性的角色纔可以用作數據庫連接的初始角色名。一個帶有 LOGIN 屬性的角色可以認爲是和"數據庫用戶"相同的事物。要創建一個具有登錄權限的角色,用下列之一

CREATE ROLE name LOGIN;
CREATE USER name;

除了 CREATE USER 默認賦予 LOGIN 之外,CREATE USER 等價於 CREATE ROLE(默認不賦予 LOGIN)。

從上面可以看出,pgsql的用戶和角色其實是一個東西。如果使用以下命令創建角色,那麼用戶和角色就一點區別都沒有了:

嘗試登錄:

 

再次查看:

二、給用戶/角色授權/回收權限

1.給role2進行授權,讓其只能對t_user表進行update

user1嘗試修改t_user的內容:

role2嘗試修改t_user的內容:

2.刪除角色/用戶role2

提示無法刪除,因此需要再回收權限,再進行刪除,因爲t_user表的update權限被賦予role2。

回收權限:

再嘗試刪除role2:

刪除成功。

三、可賦予角色的常用權限列表

SELECT

允許對聲明的表、試圖、序列 SELECT 任意字段。還允許做 COPY TO 的源。對於序列而言,這個權限還允許使用 currval 函數。

INSERT

允許向聲明的表 INSERT 一個新行。同時還允許做 COPY FROM

UPDATE

允許對聲明的表中任意字段做 UPDATE 。SELECT ... FOR UPDATE 和 SELECT ... FOR SHARE 也要求這個權限(除了 SELECT 權限之外)。比如,這個權限允許使用 nextval 和 setval 函數。

DELETE

允許從聲明的表中 DELETE 行

REFERENCES

要創建一個外鍵約束,你必須在參考表和被參考表上都擁有這個權限。

TRIGGER

允許在聲明表上創建觸發器(參見 CREATE TRIGGER 語句)

CREATE

對於數據庫,允許在該數據庫裏創建新的模式。

對於模式,允許在該模式中創建新的對象。要重命名一個現有對象,你必需擁有該對象並且對包含該對象的模式擁有這個權限。

對於表空間,允許在其中創建表,以及允許創建數據庫和模式的時候把該表空間指定爲其缺省表空間。請注意,撤銷這個權限不會改變現有數據庫和模式的存放位置。

CONNECT

允許用戶連接到指定的數據庫。該權限將在連接啓動時檢查(除了檢查 pg_hba.conf 中的任何限制之外)。

TEMPORARY
TEMP

允許在使用該數據庫的時候創建臨時表

EXECUTE

允許使用指定的函數並且可以使用任何利用這些函數實現的操作符。這是適用於函數的唯一權限。該語法同樣適用於聚集函數。

USAGE

對於過程語言,允許使用指定過程語言創建該語言的函數。這是適用於過程語言的唯一權限。

對於模式,允許訪問包含在指定模式中的對象(假設該對象的所有權要求同樣也設置了)。最終這些就允許了權限接受者"查詢"模式中的對象。沒有這個權限仍然可以看見這些對象的名字(比如通過查詢系統視圖)。同樣,撤銷該權限之後,現有的後端可能有在查找之前就執行了的語句,因此這不是一個很安全的限制對象訪問的方法。

對於序列,該權限允許使用 currval 和 nextval 函數。

ALL PRIVILEGES

一次性給予所有可以賦予的權限。PRIVILEGES 關鍵字在 PostgreSQL 裏是可選的,但是嚴格的 SQL 要求有這個關鍵字。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章