GRANT

更新时间: 2021-11-25 15:56:26

用户授权的语法介绍。

语法

用户授权的语义表达是“将某个对象的指定权限赋予给指定用户”。其语法如下:

grant_statement       ::=  GRANT privilege_definition ON resource_definition TO user_name
privilege_definition  ::=  ALL [PRIVILEGES] | READ | WRITE | ADMIN | SYSTEM
resource_definition   ::=  GLOBAL | DATABASE database_name

参数说明

参数

说明

user_name

权限被授予的用户名。必须是SQL标识符。

privilege_definition

被授予的权限。取值为以下类型:

  • READ

    具备“查询”权限。

  • WRITE

    具备“写入”权限。

  • ADMIN

    具备“管理”权限。

  • SYSTEM

    具备对于集群层面的管理权限。其内涵包含了 GLOBAL ADMIN权限。

  • ALL 或 ALL PRIVILEGES

    具备“所有”权限。包含READ、WRITE、ADMIN。

resource_definition

被授权的资源范围。资源粒度如下:

  • GLOBAL

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

  • DATABASE

    授予指定Database的指定权限。

database_name

当授权的资源范围为Database时,表示具体的授权Database名。必须是SQL标识符。

注意

  1. 权限的授权范围优先级:GLOBAL > DATABASE。

    即如果拥有了GLOBAL的READ权限,则能查询任意Database中的时序表;但如果只是拥有特定Database的READ权限,则只能查询该Database下的时序表。建议不要轻易赋予 GLOBAL权限,特别是GLOBAL ALL PRIVILEGES。

  2. ADMIN权限与READ、WRITE权限是独立权限,授予了某个Database的ADMIN权限并不意味着就能够读写该Database下的时序表。

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

  4. 不支持授予一个不存在的资源对象的权限;同样,也不支持向一个不存在的用户授权。查看已有资源的方法可参见 SHOW 语句。

  5. GRANT语句是否可以执行成功,还取决于执行者自身拥有的权限。详细请参见用户及权限管理

示例

以下例子展示了给一个名为 tsdbuser 的用户赋予名为 DB1 的Database的读权限。

GRANT READ ON DATABASE `DB1` TO `tsdbuser`;

以下例子展示了给一个名为 tsdbuser 的用户赋予名为 DB2 的Database的写权限。

GRANT WRITE ON DATABASE `DB2` TO `tsdbuser`;

以下例子展示了给一个名为 tsdbuser 的用户赋予名为 DB3 的Database的全部权限。

GRANT ALL PRIVILEGES ON DATABASE `DB3` TO `tsdbuser`;
阿里云首页 云原生多模数据库 Lindorm 相关技术圈