Hologres權(quán)限模型
當一個用戶登錄Hologres實例后,必須有實例相關的操作權(quán)限才能在權(quán)限范圍內(nèi)進行操作。本文為您介紹使用Hologres實例開發(fā)需要的權(quán)限。
Hologres鑒權(quán)流程
一個用戶從連接Hologres到使用Hologres的完整鑒權(quán)流程如下:
用戶概念
當一個阿里云賬號連接Hologres時,需要被創(chuàng)建成為Hologres的用戶(管理員需要執(zhí)行create user "xxx"
,否則會報錯role "xxx" does not exist
),才能連接成功。用戶屬于實例級別,所以添加用戶和刪除用戶相當于把用戶創(chuàng)建進實例中或者從實例中刪除。在實例內(nèi)進行的具體操作(例如創(chuàng)建表等),則是DB級別的權(quán)限,授予權(quán)限時需要在某一個DB中執(zhí)行,只享有這個DB內(nèi)對象的權(quán)限,不能跨DB使用權(quán)限。
可通過執(zhí)行select * from pg_user;
命令查看當前實例的Superuser。
角色類型 | 說明 |
超級管理員(Superuser) | 系統(tǒng)默認將購買Hologres實例的主賬號設置為Superuser,擁有實例的所有權(quán)限。可以創(chuàng)建、銷毀數(shù)據(jù)庫,也可以創(chuàng)建角色以及為角色授權(quán)等。 |
普通用戶(Normal) | 除Superuser之外的用戶都被稱為普通用戶,需要Superuser授予權(quán)限才能訪問Hologres實例,并在權(quán)限范圍內(nèi)進行數(shù)據(jù)開發(fā)。普通用戶也能被授權(quán)成為Superuser,享有實例的所有權(quán)限。 |
用戶組 | 為了方便用戶管理,可以將零個或多個用戶設置成用戶組,用來表示用戶角色。例如管理員角色、開發(fā)者角色等,一個用戶組內(nèi)的用戶擁有相同的權(quán)限。設置用戶組并授權(quán)相關角色的詳情內(nèi)容,請參見Postgres 數(shù)據(jù)庫角色。 |
權(quán)限模型
Hologres兼容PostgreSQL 11,為用戶授予實例開發(fā)權(quán)限時,可以使用標準的PostgreSQL授權(quán)語句(專家權(quán)限模型),由于PostgreSQL的權(quán)限粒度較細,且授權(quán)語句比較復雜難懂,Hologres在此基礎上又提供簡單權(quán)限模型,提供更加便捷的權(quán)限控制。
關于簡單權(quán)限模型和專家權(quán)限模型的區(qū)別和使用場景如下:
權(quán)限類型 | 適用場景 | 說明 |
專家權(quán)限模型(PostgreSQL) | 適用于需要非常嚴格權(quán)限管控的場景。例如,精確到某個人用某個表。 | 專家權(quán)限模型的權(quán)限授予粒度小且靈活,可以為用戶授予具體某個表的權(quán)限,但是授權(quán)語法比較復雜。具體權(quán)限授予操作,請參見專家權(quán)限模型。 |
簡單權(quán)限模型(Simple Permission Model,SPM) | DB級別的權(quán)限管控,適用于粗粒度的權(quán)限管理場景。 | 簡單權(quán)限模型是封裝好的權(quán)限模型,以DB為維度,每個用戶組都有對應的權(quán)限,不可修改,能滿足大部分授權(quán)場景,且授權(quán)操作比較簡單。具體權(quán)限授予操作,請參見簡單權(quán)限模型。 |
Schema級別的簡單權(quán)限模型(Schema-level Permission Model,SLPM) | 精確到Schema級別的權(quán)限管控,適用于對權(quán)限粒度較為細致且又希望簡化授權(quán)流程的場景。 | Schema級別的簡單權(quán)限模型是已經(jīng)封裝好的權(quán)限模型,以Schema為維度,每個用戶組都有對應的權(quán)限,不可修改,滿足對于權(quán)限較為細粒度的管控,且授權(quán)操作比較簡單。具體權(quán)限授予操作,請參見基于Schema級別的簡單權(quán)限模型的使用。 |
權(quán)限授予
用戶想要使用Hologres進行開發(fā),需要授予具體的權(quán)限才能在權(quán)限范圍內(nèi)操作,專家權(quán)限模型和簡單權(quán)限模型授權(quán)的具體操作和權(quán)限關系如下兩個表格所示,您可以根據(jù)需要的操作配合所使用的權(quán)限模型來為用戶授權(quán)。
Superuser默認具有表格中的所有權(quán)限。
專家權(quán)限模型操作 | 需要的權(quán)限 | 授權(quán)語句 |
CREATE USER(ROLE) DROP USER(ROLE) | CREATEROLE | 如下示例為授予用戶A創(chuàng)建角色的權(quán)限。
|
CREATE TABLE VIEW TABLE FOREIGN TABLE | DB的CONNECT權(quán)限以及對應Schema的CREATE權(quán)限 | 如下示例為授權(quán)用戶A有xx schema的建表權(quán)限。
任何用戶默認有public schema下的建表權(quán)限。 |
SELECT | 對應Schema的USAGE權(quán)限以及SELECT權(quán)限 | 您可以按照如下方式進行授權(quán):
|
INSERT UPDATE DELETE TRUNCATE | 對應Schema的USAGE權(quán)限以及INSERT/UPDATE /DELETE /TRUNCATE權(quán)限 | 您可以按照如下方式進行授權(quán):
|
ALTER TABLE | 表的owner(表的owner可以用ALTER OWNER改變) | 刪除表不能使用GRANT,只能執(zhí)行命令 |
DROP TABLE | ||
CREATE DATABASE | CREATEDB | 如下示例為授予用戶A創(chuàng)建數(shù)據(jù)庫的權(quán)限:
|
DROP DATABASE | DB owner | 刪除數(shù)據(jù)庫不能使用GRANT,只能執(zhí)行命令 |
CREATE EXTENSION | DB owner | - |
GRANT REVOKE | 具有相應權(quán)限,并具備GRANT OPTION的用戶 | 如下示例為授予用戶GRANT操作權(quán)限:
|
權(quán)限模式授權(quán) | 簡單權(quán)限模型(SPM) | Schema級別的簡單權(quán)限模型(SLPM) | ||
操作 | 需要的權(quán)限 | 授權(quán)語句 | 需要的權(quán)限 | 授權(quán)語句 |
CREATE USER(ROLE) DROP USER(ROLE) | DB admin | 您可以選擇如下兩種方式為用戶授予admin權(quán)限:
重要 SPM權(quán)限模型暫不支持為用戶名稱以 | DB admin | 您可以選擇如下兩種方式為用戶授予admin權(quán)限:
重要 SLPM權(quán)限模型暫不支持為用戶名稱以 |
CREATE TABLE VIEW TABLE FOREIGN TABLE | 擁有superuser、admin或者developer用戶組權(quán)限 | 您可以參照本表格內(nèi)SPM的授權(quán)語句為用戶授予admin或者developer權(quán)限。 | 擁有superuser、schema的admin或者developer用戶組權(quán)限 | 您可以參照本表格內(nèi)SLPM的授權(quán)語句為用戶授予schema的admin或者developer權(quán)限。 |
SELECT | 擁有superuser、admin、developer、writer或viewer用戶組權(quán)限 | 您可以參照本表格內(nèi)SPM的授權(quán)語句為用戶授予admin或者developer、writer、viewer權(quán)限。 | 擁有superuser、schema的admin、developerwriter或viewer用戶組權(quán)限 | 您可以參照本表格內(nèi)SLPM的授權(quán)語句為用戶授予schema的admin、developer、writer或viewer權(quán)限。 |
INSERT UPDATE DELETE TRUNCATE | 擁有superuser、admin、developer或writer用戶組權(quán)限 | 您可以參照本表格內(nèi)SPM的授權(quán)語句為用戶授予admin、developer或者writer權(quán)限。 | 擁有superuser、schema的admin、developer或writer用戶組權(quán)限 | 您可以參照本表格內(nèi)SLPM的授權(quán)語句為用戶授予schema的admin、developer、writer或viewer權(quán)限。 |
ALTER TABLE | 擁有superuser、admin或者developer用戶組權(quán)限 | 您可以參照本表格內(nèi)SPM的授權(quán)語句為用戶授予admin或者developer權(quán)限。 | 擁有superuser、schema的admin或者developer用戶組權(quán)限 | 您可以參照本表格內(nèi)SLPM的授權(quán)語句為用戶授予schema的admin或者developer權(quán)限。 |
DROP TABLE | ||||
CREATE DATABASE DROP DATABASE CREATE EXTENSION | DB admin | 您可以參照本表格內(nèi)SPM的授權(quán)語句為用戶授予admin權(quán)限。 | DB admin | 您可以參照本表格內(nèi)SLPM的授權(quán)語句為用戶授予schema的admin權(quán)限。 |
GRANT REVOKE | DB admin | 如下示例分別為用戶A授予GRANT和REVOKE權(quán)限:
| DB admin | 如下示例分別為用戶A授予GRANT和REVOKE權(quán)限:
|