跳到主要内容

权限

权限(Privilege)是执行某项操作的许可。用户必须拥有特定权限才能在 Databend 中执行相应操作。例如,查询表时需要对该表拥有 SELECT 权限;读取 Stage 中的数据集则必须拥有 READ 权限。

在 Databend 中,用户可通过两种方式获得权限:一是直接将权限授予用户;二是先将权限授予角色,再将该角色赋予用户。

Alt text

管理权限

使用以下命令管理用户或角色的权限:

向用户/角色授予权限

授予权限时,您可以选择直接授予用户,或先授予角色再授予用户。
示例 1 中,权限直接授予用户 david:先创建密码为 abc123 的新用户 david,再将 default 模式中所有对象的全部权限直接授予 david,最后查看 david 的权限。

示例 1:
-- 创建用户 david,密码 abc123
CREATE USER david IDENTIFIED BY 'abc123';

-- 将 default 模式中所有对象的全部权限授予 david
GRANT ALL ON default.* TO david;

-- 查看 david 的权限
SHOW GRANTS FOR david;

┌───────────────────────────────────────────────────┐
│ Grants │
├───────────────────────────────────────────────────┤
GRANT ALL ON 'default'.'default'.* TO 'david'@'%'
└───────────────────────────────────────────────────┘

示例 2 中,权限先授予角色,再授予用户 eric:先创建角色 writer 并授予其对 default 模式中所有对象的全部权限;再创建密码为 abc123 的新用户 eric,并将 writer 角色授予 eric;最后查看 eric 的权限。

示例 2:
-- 创建角色 writer
CREATE ROLE writer;

-- 将 default 模式中所有对象的全部权限授予 writer
GRANT ALL ON default.* TO ROLE writer;

-- 创建用户 eric,密码 abc123
CREATE USER eric IDENTIFIED BY 'abc123';

-- 将 writer 角色授予 eric
GRANT ROLE writer TO eric;

-- 查看 eric 的权限
SHOW GRANTS FOR eric;

┌──────────────────────────────────────────────────┐
│ Grants │
├──────────────────────────────────────────────────┤
GRANT ALL ON 'default'.'default'.* TO 'eric'@'%'
└───────────────────────────────────────────────────┘

从用户/角色撤销权限

在访问控制中,权限可从用户或角色撤销。
示例 1(续)中,从用户 david 撤销 default 模式中所有对象的全部权限,并查看 david 的权限:

示例 1(续):
-- 从 david 撤销 default 模式中所有对象的全部权限
REVOKE ALL ON default.* FROM david;

-- 查看 david 的权限
SHOW GRANTS FOR david;

示例 2(续)中,从角色 writer 撤销 default 模式中所有对象的全部权限,并查看 eric 的权限:

示例 2(续):
-- 从 writer 撤销 default 模式中所有对象的全部权限
REVOKE ALL ON default.* FROM ROLE writer;

-- 查看 eric 的权限
-- 权限已从角色撤销,因此不显示任何权限
SHOW GRANTS FOR eric;

访问控制权限

Databend 提供多种权限,实现对数据库对象的细粒度控制,可分为以下两类:

所有权限

权限对象类型描述
ALL所有授予指定对象类型的全部权限。
ALTERGlobal, Database, Table, View修改数据库、表、用户或 UDF。
CREATEGlobal, Table创建表或 UDF。
CREATE DATABASEGlobal创建数据库或 UDF。
CREATE WAREHOUSEGlobal创建 Warehouse。
CREATE CONNECTIONGlobal创建 Connection。
CREATE SEQUENCEGlobal创建 Sequence。
CREATE PROCEDUREPROCEDURE创建 Procedure。
DELETETable删除或截断表中的行。
DROPGlobal, Database, Table, View删除数据库、表、View 或 UDF;恢复已删除的表。
INSERTTable向表插入行。
SELECTDatabase, Table从表选择行;显示或使用数据库。
UPDATETable更新表中的行。
GRANTGlobal向用户或角色授予/撤销权限。
SUPERGlobal, Table终止查询;设置全局配置;优化表;分析表;操作 Stage(列出、创建、删除 Stage)、Catalog 或 Share。
USAGEGlobal“无权限”的同义词。
CREATE ROLEGlobal创建角色。
DROP ROLEGlobal删除角色。
CREATE USERGlobal创建 SQL 用户。
DROP USERGlobal删除 SQL 用户。
WRITEStage写入 Stage。
READStage读取 Stage。
USAGEUDF使用 UDF。
ACCESS CONNECTIONCONNECTION访问 Connection。
ACCESS SEQUENCESEQUENCE访问 Sequence。
ACCESS PROCEDUREPROCEDURE访问 Procedure。

全局权限

权限描述
ALL授予指定对象类型的全部权限。
ALTER添加或删除表列;修改 Cluster Key;重新聚簇表。
CREATEROLE创建角色。
CREAT DATABASE创建 DATABASE。
CREATE WAREHOUSE创建 WAREHOUSE。
CREATE CONNECTION创建 CONNECTION。
DROPUSER删除用户。
CREATEUSER创建用户。
DROPROLE删除角色。
SUPER终止查询;设置或取消设置;操作 Stage、Catalog 或 Share;调用函数;COPY INTO Stage。
USAGE仅连接到 Databend 查询。
CREATE创建 UDF。
DROP删除 UDF。
ALTER修改 UDF;修改 SQL 用户。

表权限

权限描述
ALL授予指定对象类型的全部权限。
ALTER添加或删除表列;修改 Cluster Key;重新聚簇表。
CREATE创建表。
DELETE删除表中的行;截断表。
DROP删除或恢复表;恢复最近删除的表版本。
INSERT向表插入行;COPY INTO 表。
SELECT从表选择行;SHOW CREATE 表;DESCRIBE 表。
UPDATE更新表中的行。
SUPER优化或分析表。
OWNERSHIP授予对数据库的完全控制权;在特定对象上一次只能有一个角色持有此权限。

视图权限

权限描述
ALL授予指定对象类型的全部权限。
ALTER创建或删除 View;使用另一个 Query 修改现有 View。
DROP删除 View。

数据库权限

拥有以下任一数据库权限或数据库中任一表的任何权限后,即可使用 USE DATABASE 指定数据库。

权限描述
ALTER重命名数据库。
DROP删除或恢复数据库;恢复最近删除的数据库版本。
SELECTSHOW CREATE 数据库。
OWNERSHIP授予对数据库的完全控制权;在特定对象上一次只能有一个角色持有此权限。
USAGE允许使用 USE <database> 进入数据库,但不授予其中任何对象的访问权限。

注意:

  1. 若角色拥有数据库,则该角色可访问数据库中的所有表。

会话策略权限

权限描述
SUPER终止查询;设置或取消设置。
ALL授予指定对象类型的全部权限。

Stage 权限

权限描述
WRITE写入 Stage,例如 COPY INTO Stage、预签名上传或删除 Stage。
READ读取 Stage,例如列出 Stage、查询 Stage、从 Stage COPY INTO 表、预签名下载。
ALL授予指定对象类型的 READ、WRITE 权限。
OWNERSHIP授予对 Stage 的完全控制权;在特定对象上一次只能有一个角色持有此权限。

注意:

  1. 不检查外部位置认证。

UDF 权限

权限描述
USAGE可使用 UDF,例如 COPY INTO Stage、预签名上传。
ALL授予指定对象类型的 READ、WRITE 权限。
OWNERSHIP授予对 UDF 的完全控制权;在特定对象上一次只能有一个角色持有此权限。

注意:

  1. 若 UDF 已被常量折叠,则不检查 UDF 认证。
  2. 若 UDF 是 INSERT 中的值,则不检查 UDF 认证。

目录权限

权限描述
SUPERSHOW CREATE Catalog;创建或删除 Catalog。
ALL授予指定对象类型的全部权限。

连接权限

权限描述
Access Connection可访问 Connection。
ALL授予指定对象类型的 Access Connection 权限。
OWNERSHIP授予对 Connection 的完全控制权;在特定对象上一次只能有一个角色持有此权限。

序列权限

权限描述
Access Sequence可访问 Sequence(如 Drop、Desc)。
ALL授予指定对象类型的 Access Sequence 权限。
OWNERSHIP授予对 Sequence 的完全控制权;在特定对象上一次只能有一个角色持有此权限。

过程权限

权限描述
Access Procedure可访问 Procedure(如 Drop、Call、Desc)。
ALL授予指定对象类型的 Access Procedure 权限。
OWNERSHIP授予对 Procedure 的完全控制权;在特定对象上一次只能有一个角色持有此权限。