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及以上版本支持 |
TABLE | 〇 | ✖️ | 授予指定表的某个权限。 |
权限资源范围的优先级:GLOBAL > DATABASE(SCHEMA)> TABLE。即如果拥有了GLOBAL的READ权限,则能读取任意Database中的表。
在使用DATABASE、SCHEMA或TABLE关键字时,需添加对应级别的对象名称(identifier)。例如DATABASE default
、SCHEMA default
、TABLE 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;