最近更新时间:2024.03.11 16:10:23
首次发布时间:2024.03.11 16:10:23
云搜索服务启用企业级 SQL 分析后,在 SQL 服务中提供了表级别的细粒度权限控制,支持基于角色的权限访问控制。
在进行用户权限管理前,需要先了解以下几个名词的含义:
在权限系统中,一个用户被识别为一个 User Identity(用户标识)。用户标识由两部分组成:username 和 userhost。
%
进行模糊匹配。如果不指定 host,默认为 '%',即表示该用户可以从任意 host 连接到数据库。不同的权限代表不同的操作许可。
*.*
上的权限。该权限适用于任意数据库中的任意表。db.*
上的权限。该权限适用于指定数据库中的任意表。db.tbl
上的权限。该权限适用于指定数据库中的指定表。权限类别 | 权限 | 描述 |
---|---|---|
库表权限 | GRANT_PRIV | 权限变更权限。 说明
|
SELECT_PRIV | 对数据库、表的只读权限。 | |
LOAD_PRIV | 对数据库、表的写权限。包括 Load、Insert、Delete 等。 | |
ALTER_PRIV | 对数据库、表的更改权限。包括重命名库表、添加-删除-变更表格列、添加-删除分区等操作。 | |
CREATE_PRIV | 创建数据库、表、(物化)视图的权限。 说明
| |
DROP_PRIV | 删除数据库、表、视图的权限。 | |
节点权限 | NODE_PRIV | 节点变更权限,operator 角色默认拥有。 |
资源权限 | ALL_PRIV | 所有权限,admin 角色默认拥有。 |
角色是一组权限的集合。一个新建的角色默认没有任何权限,可以通过 GRANT 命令赋予该角色权限。
用户和角色是多对多的关系。新创建的用户可以被赋予角色,则自动被赋予该角色所拥有的权限。后续对角色的权限变更,也会体现在所有属于该角色的用户权限上。删除角色或者撤销用户的角色会相应地删除用户的对应权限。
说明
用户属性直接附属于某一用户,而不是用户标识。即 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';
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');