PostgreSQL權限管理與對象層次

角色

PostgreSQL以角色的方式來實現對權限的管理。在PostgreSQL中,不再有成員的概念,只有角色。為了便于理解,我們可以把與之對應的角色稱為組角色成員角色

CREATE ROLE group1;
/*創建組角色group1,沒有賦予login權限,所以這個角色是不可登陸的*/

CREATE ROLE member1 LOGIN PASSWORD 12345678 INHERIT;
/*創建成員角色member1*/
/*login:賦予了該角色可登錄權限*/
/*PASSWORD:設置登錄密碼,可以不設置*/
/*INHERIT:可繼承其他角色權限,不可繼承為NOINHERIT,默認可繼承*/

GRANT updata ON  accounts TO GROUP group1;
/*把對對象accounts的updata操作權限賦予組角色group1*/
REVOKE updata ON accouts FROM GROUP group1;
/*撤銷*/

GRANT group1 TO member1;
/*賦予成員角色member1組角色grou[p1的權限*/
REVOKE group1 FROM member1;
/*撤銷*/

在權限管理中,通常把多個用戶角色賦予一個組角色,權限的賦予和撤銷都從組角色進行。

對象

PostgreSQL中,對象層次分為:服務器-數據庫-模式-表或其他類型對象。

對象被創建它的角色所有,其他角色默認沒有對它的權限。

模式schema可以通過搜索路徑search_path設置,默認值為"$user",public,即如果創建了同名模式會默認為同名模式,否則默認為public

不同模式下可創建同名表,比如public模式下創建了表t1,在zyj模式下還可以創建名為t1的表,不同模式下的對象不可見,訪問時如果不做指定會默認訪問當前模式下的表。

PostgreSQL權限管理.png

postgres中:

  • 同時只能訪問一個數據庫,權限控制以數據庫密碼方式實現,與角色無關;
  • 同時可以訪問多個模式,權限控制以角色方式實現,默認創建者擁有權限,其他角色需要授權;
  • 角色對于有權限的模式中沒有權限的對象(角色zyj2對于public模式下的表t1),可見,但不可訪問;
  • 角色對于沒有權限的模式中的對象(角色zyj2對于zyj模式下的表t1),既不可見,也不可訪問;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容