全部產品
Search
文件中心

Hologres:Hologres許可權模型

更新時間:Dec 18, 2024

當一個使用者登入Hologres執行個體後,必須有執行個體相關的操作許可權才能在許可權範圍內進行操作。本文為您介紹使用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建立角色的許可權。

alter user A createrole;

CREATE TABLE

VIEW TABLE

FOREIGN TABLE

DB的CONNECT許可權以及對應Schema的CREATE許可權

如下樣本為授權使用者A有xx schema的建表許可權。

GRANT CREATE ON SCHEMA xx TO A;

任何使用者預設有public schema下的建表許可權。

SELECT

對應Schema的USAGE許可權以及SELECT許可權

您可以按照如下方式進行授權:

GRANT USAGE ON SCHEMA xx to A;
GRANT SELECT ON TABLE xx TO A;
GRANT SELECT ON ALL TABLES IN SCHEMA xx TO A;

INSERT

UPDATE

DELETE

TRUNCATE

對應Schema的USAGE許可權以及INSERT/UPDATE /DELETE /TRUNCATE許可權

您可以按照如下方式進行授權:

GRANT USAGE ON SCHEMA xx to A;
GRANT 【INSERT/UPDATE/DELETE/TRUNCATE】 ON TABLE xx TO A;
GRANT 【INSERT/UPDATE/DELETE/TRUNCATE】 ON ALL TABLES IN SCHEMA xx TO A;

ALTER TABLE

表的owner(表的owner可以用ALTER OWNER改變)

刪除表不能使用GRANT,只能執行命令ALTER TABLE xx OWNER TO A; 將表的owner修改為A後,由A刪除該表。

DROP TABLE

CREATE DATABASE

CREATEDB

如下樣本為授予使用者A建立資料庫的許可權:

ALTER USER A CREATEDB;

DROP DATABASE

DB owner

刪除資料庫不能使用GRANT,只能執行命令ALTER DATABASE xx OWNER TO A; 將資料庫的owner修改為A後,由A刪除該DB。

CREATE EXTENSION

DB owner

-

GRANT

REVOKE

具有相應許可權,並具備GRANT OPTION的使用者

如下樣本為授予使用者GRANT操作許可權:

GRANT 【Privilege】TO A WITH GRANT OPTION;

許可權模式授權

簡單許可權模型(SPM)

Schema層級的簡單許可權模型(SLPM)

操作

需要的許可權

授權語句

需要的許可權

授權語句

CREATE USER(ROLE)

DROP USER(ROLE)

DB admin

您可以選擇如下兩種方式為使用者授予admin許可權:

  • call spm_grant('A', '<dbname>_admin');
  • call spm_create_user('A', '<dbname>_admin');
重要

SPM許可權模型暫不支援為使用者名稱稱以admindeveloperwriterviewerall_users結尾的自訂使用者授權。

DB admin

您可以選擇如下兩種方式為使用者授予admin許可權:

  • call slpm_create_user('A', '<dbname>.<schema>.admin');
  • call slpm_grant('<dbname>.<schema>.admin','A');
重要

SLPM許可權模型暫不支援為使用者名稱稱以admindeveloperwriterviewerall_users結尾的自訂使用者授權。

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許可權:

call spm_grant('A', 'role');
call spm_revoke('A', 'role');

DB admin

如下樣本分別為使用者A授予GRANT和REVOKE許可權:

call slpm_grant('A', 'role');
call slpm_revoke('A', 'role');