當一個使用者登入Hologres執行個體後,必須有執行個體相關的操作許可權才能在許可權範圍內進行操作。本文為您介紹使用Hologres執行個體開發需要的許可權。
Hologres鑒權流程
一個使用者從串連Hologres到使用Hologres的完整鑒權流程如下:
使用者概念
當一個阿里雲帳號串連Hologres時,需要被建立成為Hologres的使用者(管理員需要執行create user "xxx"
,否則會報錯role "xxx" does not exist
),才能串連成功。使用者屬於執行個體層級,所以添加使用者和刪除使用者相當於把使用者建立進執行個體中或者從執行個體中刪除。在執行個體內進行的具體操作(例如建立表等),則是DB層級的許可權,授予許可權時需要在某一個DB中執行,只享有這個DB內對象的許可權,不能跨DB使用許可權。
可通過執行select * from pg_user;
命令查看當前執行個體的Superuser。
許可權模型
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許可權:
|