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