You need to enable JavaScript to run this app.
导航
SQL 服务用户管理
最近更新时间:2024.07.17 10:26:44首次发布时间:2024.03.11 16:10:23

云搜索服务启用分析服务后,在 SQL 服务中提供了表级别的细粒度权限控制,支持基于角色的权限访问控制。

背景信息

在进行用户权限管理前,需要先了解以下几个名词的含义:

用户标识 user_identity

在权限系统中,一个用户被识别为一个 User Identity(用户标识)。用户标识由两部分组成:username 和 userhost。

  • username 为用户名,由英文大小写组成。
  • userhost 表示该用户连接数据库时的 IP。host 部分可以使用%进行模糊匹配。如果不指定 host,默认为 '%',即表示该用户可以从任意 host 连接到数据库。

权限 privilege

不同的权限代表不同的操作许可。

  • Global level:全局权限,即通过 GRANT 语句授予的*.*上的权限。该权限适用于任意数据库中的任意表。
  • Database level:数据库级权限,即通过 GRANT 语句授予的db.*上的权限。该权限适用于指定数据库中的任意表。
  • Table level:表级权限,即通过 GRANT 语句授予的db.tbl上的权限。该权限适用于指定数据库中的指定表。

权限类别

权限

描述

库表权限

GRANT_PRIV

权限变更权限。
允许执行包括授权、撤权,添加-删除-变更用户,添加-删除-变更角色等操作。变更包括变更权限、帐号密码、属性等。

说明

  • 只有 Global level GRANT 权限可以创建-删除-变更用户和角色。
  • 授权和撤权:根据 level 级别限定于特定的 level 里的 table;
  • SET PASSWORD:拥有 Global level GRANT 权限的用户,可以设置任意用户的密码;普通用户可以设置自己对应的 UserIdentity 的密码。

SELECT_PRIV

对数据库、表的只读权限。

LOAD_PRIV

对数据库、表的写权限。包括 Load、Insert、Delete 等。

ALTER_PRIV

对数据库、表的更改权限。包括重命名库表、添加-删除-变更表格列、添加-删除分区等操作。

CREATE_PRIV

创建数据库、表、(物化)视图的权限。

说明

  • 用户必须同时有 base table 的 SELECT_PRIV 权限才能创建视图。
  • 对视图而言,其对外权限设置默认和 base table 一样(物化视图只读)。

DROP_PRIV

删除数据库、表、视图的权限。

节点权限

NODE_PRIV

节点变更权限,operator 角色默认拥有。
包括节点的添加、删除、下线等操作,也包括计算节点的 NodeGroup 变更。

资源权限

ALL_PRIV

所有权限,admin 角色默认拥有。

角色 role

角色是一组权限的集合。一个新建的角色默认没有任何权限,可以通过 GRANT 命令赋予该角色权限。
用户和角色是多对多的关系。新创建的用户可以被赋予角色,则自动被赋予该角色所拥有的权限。后续对角色的权限变更,也会体现在所有属于该角色的用户权限上。删除角色或者撤销用户的角色会相应地删除用户的对应权限。

说明

  • 只支持给角色授权,不支持直接给用户授权。
  • 默认存在 admin 角色(拥有 ALL_PRIV 权限)和 operator 角色(拥有 NODE_PRIV 权限)。

用户属性 user_property

用户属性直接附属于某一用户,而不是用户标识。即 cmy@'192.%' 和 cmy@'10.%' 都拥有同一组用户属性,该属性属于用户 cmy,而不是用户标识 cmy@'192.%' 或 cmy@'10.%'。
用户属性包括但不限于: 用户最大连接数、用户的 NodeGroup 等。

创建、查看和删除角色

创建角色

CREATE ROLE role1;

查看角色列表

SHOW ROLES;

返回如下类似信息:
图片
删除角色

DROP ROLE role1;

创建、查看和删除用户

创建用户

CREATE USER 'user1'@'%' IDENTIFIED BY 'qaPwXXX' DEFAULT ROLE 'role1';

说明

目前仅支持在创建用户时指定角色,暂时不支持修改用户的角色。

查看用户

SHOW USER;

删除用户

DROP USER 'user1'@'%';

授权、撤权

授予角色权限

GRANT SELECT_PRIV ON *.* TO ROLE 'role1';
  • SELECT_PRIV:对数据库、表的只读权限。
  • *.*:表示授予的权限适用于任意数据库中的任意表。

如需了解更多权限和权限作用范围,请参见权限 privilege

创建用户并绑定角色

CREATE USER 'user1'@'%' IDENTIFIED BY 'qaPwdxxx' DEFAULT ROLE 'role1';

说明

目前仅支持在创建用户时指定角色,暂时不支持修改用户的角色。

创建用户并绑定角色后,您可以执行SHOW ALL GRANTS;命令,查看所有用户的权限列表。您可以从返回信息中,查看到新建用户 user1 拥有SELECT_PRIV权限。
图片

撤销角色权限

REVOKE SELECT_PRIV ON *.* FROM ROLE 'role1';

撤销角色权限后,您可以执行SHOW ALL GRANTS;命令,查看所有用户的权限列表。您可以从返回信息中,查看到与角色关联的用户 user1 已经没有SELECT_PRIV权限。
图片

查看用户权限

  • 查看当前用户权限列表:SHOW GRANTS;
  • 查看其他用户权限列表:SHOW GRANTS FOR 'user1'@'127.0.0.1';
  • 查看所有用户权限列表:SHOW ALL GRANTS;

返回如下类似信息:
图片

设置、查看用户属性

设置用户属性

  • 设置用户的最大连接数:SET PROPERTY FOR user1 'max_user_connections' = '1000';
  • 设置用户的 Node Group 信息:SET PROPERTY FOR user1 'node_groups' = 'ETL,SERVING,OLAP';

用户属性包括但不限于: 用户最大连接数、用户的 NodeGroup 等。

查看用户属性

  • 查看经过表达式过滤的用户属性:SHOW PROPERTY FOR user1 LIKE '%connections';
  • 查看用户全部属性:SHOW PROPERTY FOR user1;

返回如下类似信息:
图片

设置用户密码

  • 重置当前用户的密码:SET PASSWORD = PASSWORD('qaPwdxxx');
  • 重置其他用户的密码:SET PASSWORD FOR 'user1'@'%' = PASSWORD('qaPwdxxx');