GRANT语法用于给授予指定权限,例如表的读写权限、数据库的所有权限等。

适用引擎

GRANT语法适用于宽表引擎和时序引擎。无版本限制。

语法

grant_permission_statement ::=  GRANT privilege_definition ON resource_definition TO user_identifier 
privilege_definition       ::=  ALL | READ | WRITE | ADMIN | TRASH | SYSTEM
resource_definition        ::=  GLOBAL | DATABASE identifier | SCHEMA identifier | TABLE identifier

使用说明

GRANT语句是否可以执行成功,还取决于执行者自身拥有的权限。

权限(privilege_definition)

共以下几种权限:

权限

说明

ALL或ALL PRIVILEGE

为用户授予所有权限,包括下述四种权限。

READ

为用户授予“读”权限。

WRITE

为用户授予“写”权限。

ADMIN

为用户授予“管理员”权限。

重要

ADMIN权限与READ、WRITE权限是独立的,授予了某个Database的ADMIN权限并不意味着就能够读写该Database下所有的表,需单独添加表的读写权限。

TRASH

为用户授予“删除”权限。

SYSTEM

为用户授予集群层面的管理权限。包含GLOBAL ADMIN权限。

重要

不支持授予DATABASE粒度的SYSTEM权限。

权限范围(resource_definition)

宽表引擎和时序引擎对GRANT语句可授权的资源范围的支持情况如下:

权限

宽表引擎

时序引擎

说明

GLOBAL

授予全局所有资源的特定权限。

重要

建议不要轻易赋予GLOBAL权限,特别是GLOBAL ALL PRIVILEGES。

DATABASE

授予指定Database的某个权限。作用等同于SCHEMA。

说明

宽表引擎2.5.3.3及以上版本支持DATABASE关键字。2.5.3.3之前版本仅支持SCHEMA关键字。

TABLE

✖️

授予指定表的某个权限。

权限资源范围的优先级:GLOBAL > DATABASE(SCHEMA)> TABLE。即如果拥有了GLOBAL的READ权限,则能读取任意Database中的表。

在使用DATABASE、SCHEMA或TABLE关键字时,需添加对应级别的对象名称(identifier)。例如DATABASE defaultSCHEMA defaultTABLE test分别表示数据库default和表test。

授权对象(user_identifier

user_identifier为需要授权的用户名。

示例

授予全部权限

为用户user1授予数据库db1的全部权限。

GRANT ALL ON DATABASE db1 TO user1;
-- 或者
GRANT ALL ON SCHEMA db1 TO user1;

授予指定权限

  • 为用户user2授予数据库db2中的表table2的管理员权限。

    GRANT ADMIN ON TABLE db2.table2 TO user2;
  • 为用户user3授予当前数据库中表table3的写权限。

    GRANT WRITE ON TABLE table3 TO user3; 
  • 为用户user4授予全局读权限。

    GRANT READ ON GLOBAL TO user4;