PostgreSQL 使用角色的概念管理數(shù)據(jù)庫訪問權(quán)限。角色是一系列相關(guān)權(quán)限的集合。為了管理方便,通常把一系列相關(guān)的數(shù)據(jù)庫權(quán)限賦給一個角色,如果哪個用戶需要這些權(quán)限,就把角色賦給相應(yīng)的用戶。由于用戶也擁有一系列的相關(guān)權(quán)限,為了簡化管理,在 PostgreSQL 中,角色與用戶是沒有區(qū)別的,一個用戶也是一個角色,我們可以把一個用戶的權(quán)限賦給另一個用戶。
??用戶和角色在整個數(shù)據(jù)庫實(shí)例中是全局的,在同一個實(shí)例中的不同數(shù)據(jù)庫中,看到的用戶都是相同的。在初始化數(shù)據(jù)庫系統(tǒng)時有一個預(yù)定義的超級用戶,這個用戶的名稱與初始化該數(shù)據(jù)庫的操作系統(tǒng)用戶名相同。如果數(shù)據(jù)庫是建在操作系統(tǒng)用戶“postgres”(通常我們把數(shù)據(jù)庫安裝在此用戶下)下的,那么這個數(shù)據(jù)庫超級用戶的名稱也叫“postgres”??梢杂眠@個超級用戶連接數(shù)據(jù)庫,然后創(chuàng)建出更多的普通用戶或其他超級用戶。
??在 SQL 標(biāo)準(zhǔn)中,用戶和角色之間的區(qū)別很清楚,并且用戶不會自動繼承權(quán)限而角色會繼承。這種行為在 PostgreSQL 中也可以實(shí)現(xiàn):為要用作 SQL 角色的角色給予 INHERIT 屬性,而為要用作 SQL 用戶的角色給予 NOINHERIT 屬性。不過,為了向后兼容 8.1 以前的發(fā)布(在其中用戶總是擁有它們所在組的權(quán)限),PostgreSQL 默認(rèn)給所有的角色 INHERIT 屬性。
1.2 用戶和用戶組
??PostgreSQL 可以把用戶分組在一起,權(quán)限可以被授予一整個組或從一整個組回收。一旦組角色存在,可以使用 GRANT 和 REVOKE 命令增加和移除成員:
GRANT group_role TO role1, ... ;
REVOKE group_role FROM role1, ... ;
注意事項:
一個用戶可以是多個組的成員。
不允許環(huán)狀的成員關(guān)系。
不允許把一個用戶授予給 PUBLIC。
1.3 PUBLIC 角色
??PUBLIC 是 PostgreSQL 數(shù)據(jù)庫中一個特殊的角色組,在元數(shù)據(jù)表(pg_roles)中都查不到該角色,數(shù)據(jù)庫中所創(chuàng)建的角色都可以理解為是 PUBLIC 角色組成員。而且對 PUBLIC 權(quán)限的繼承完全不受 NOINHERIT 的控制,一旦創(chuàng)建了一個擁有 login 權(quán)限的角色,它會立即繼承 PUBLIC 角色組擁有的權(quán)限,此時如果想通過 revoke(比如 revoke connect on database)來回收的話不會成功,只能從 PUBLIC 組回收相關(guān)權(quán)限(比如 revoke connect on database from PUBLIC)。
PUBLIC 默認(rèn)權(quán)限
數(shù)據(jù)庫的 connect,temp/temprary 權(quán)限。任何新建的數(shù)據(jù)庫,系統(tǒng)會自動為 PUBLIC 角色賦予connect 和在任何 schema 下創(chuàng)建臨時表的權(quán)限。
public 模式的 usage,create 權(quán)限。在任何新建的數(shù)據(jù)庫的 public 模式下有 usage 和 create 的權(quán)限。
函數(shù)的 execute 權(quán)限(僅限于 public 模式下)。
語言和數(shù)據(jù)類型(包括域)的 usage 權(quán)限。
原文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。