角色
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),既不可見,也不可訪問;