全部產品
Search
文件中心

AnalyticDB:系統管理使用者許可權

更新時間:Jan 09, 2025

預設情況下,普通使用者沒有任何許可權。高許可權使用者(包括初始帳號)可以為普通使用者授予資料庫物件的操作許可權。

給使用者授權,可採用以下兩種方式:

  • 為使用者授予資料庫物件的操作許可權。

  • 基於角色為使用者授權。

    此授權方式可簡化多個使用者的許可權管理操作。例如,當您需要將某個表的讀許可權授予多個使用者時,只要將表的讀許可權授予角色,再將角色授予多個使用者。

授予資料庫物件的操作許可權

當資料庫物件(庫,模式,表,視圖,序列,函數等)被建立時,所有許可權歸屬於該對象的建立者(Owner)。預設只有對象Owner和RDS_SUPERUSER有許可權操作該對象。當其他使用者需要相應許可權來操作該對象時,需要授權。

下表列出了每種對象的相應許可權。

資料庫物件

許可權

Tables,Views,Sequences

SELECT INSERT UPDATE DELETE RULE ALL

Table Column

SELECT INSERT UPDATE

External Tables

SELECT RULE ALL

Databases

CONNECT CREATE TEMPORARY | TEMP ALL

Functions

EXECUTE

Procedural Languages

USAGE

Schemas

CREATE USAGE ALL

重要

每種對象需要單獨授權。例如,對Database授予ALL許可權(GRANT ALL)並不代表可以訪問該Database內部的所有表,只是授予了對該Database的CONNECT、CREATE和TEMP許可權。

  • 將表mytable的INSERT許可權授權給jsmith。樣本如下:

    GRANT INSERT ON mytable TO jsmith;
  • 將myschema中所有表的SELECT、TRUNCATE許可權授權給jsmith。樣本如下:

    GRANT SELECT,TRUNCATE ON ALL TABLES IN SCHEMA myschema TO jsmith;
  • 將表mytable col1列的SELECT許可權授權給jsmith。樣本如下:

    GRANT SELECT (col1) on TABLE mytable TO jsmith;
  • 從jsmith回收表mytable的所有許可權。樣本如下:

    REVOKE ALL PRIVILEGES ON mytable FROM jsmith;

基於角色的授權

基於角色為使用者授權,具體指建立角色,為角色授權,再將角色授予一個或多個使用者。完成後,使用者將繼承角色的所有許可權。下文以一個樣本介紹基於角色授權的完整過程。

  1. 建立一個擁有CREATEROLE和CREATEDB許可權的角色,名稱為admin。

CREATE ROLE admin CREATEROLE CREATEDB;
  1. 將角色admin的成員資格授予使用者john、sally和bob。

GRANT admin TO john, sally, bob;
  1. 移除使用者bob的角色admin成員資格。

REVOKE admin FROM bob;
  1. 對角色admin授予資料庫物件的許可權。具有角色admin的使用者都將繼承該許可權。

GRANT ALL ON TABLE mytable TO admin;
GRANT ALL ON SCHEMA myschema TO admin;
GRANT ALL ON DATABASE mydb TO admin;

常見問題

如何授予DROP TABLE許可權

刪除表的許可權無法通過GRANT命令授予使用者。但表或Schema的所有者(Owner)可以刪除表。

高許可權使用者、表或Schema的所有者,可以將表或Schema的所有者(Owner)變更為目標使用者,使目標使用者能夠刪除表。

-- 將表mytable的所有者變更為new_owner。new_owner可以刪除表mytable。
ALTER Table mytable OWNER TO new_owner; 

-- 將myschema的所有者變更為new_owner。new_owner不僅可以刪除表mytable,還可以刪除myschema中的所有表。
ALTER SCHEMA myschema OWNER TO new_owner; 

如果多個使用者都需要刪除同一張表的許可權,您可以利用角色許可權繼承的特性,將表或Schema的所有者(Owner)變更某個角色,再將這個角色授予多個使用者。

-- 建立一個角色new_role,用於下文的所有者變更。
CREATE ROLE new_role; 

-- 將表mytable的所有者變更為new_role。new_role可以刪除表mytable。
ALTER Table mytable OWNER TO new_role; 

-- 將myschema的所有者變更為new_role。new_role不僅可以刪除表mytable,還可以刪除myschema中的所有表。
ALTER SCHEMA myschema OWNER TO new_role; 

-- 將使用者myuser添加為new_role的成員,繼承new_role的許可權。
GRANT new_role To myuser; 

相關文檔