ACL权限体系

AnalyticDB for MySQL 2.0支持基于数据库表的层级权限管理模型,提供类似MySQL的ACL授权模式。一个ACL授权由被授权的用户、授权对象和授予的对象权限组成。和MySQL不同的是,AnalyticDB for MySQL 2.0目前不支持针对用户在Host上授权。

以下列出AnalyticDB for MySQL 2.0的权限对象和各对象权限:

  • Database(库),即db_name.**(默认数据库),指定数据库或数据库上所有表/表组。

  • TableGroup(表组),即db_name.table_group_nametable_group_name,特定表组。

  • Table(表),即db_name.table_nametable_name,特定表。

  • Column(列),语法上由column_list和Table组成,指定表的特定列。

权限模型说明

  • 权限按数据库 > 表组 >表 > 列的顺序依次向下继承。

    注意:如果某个账号有数据库级别的权限但回收了某个表的权限,则这个账号依然拥有该表的权限。

  • 在数据库级别,某个权限实际可能包含多个权限,例如GRANT CREATE ON *.*同时包含创建数据表和创建表组的权限。

权限类型 数据库级别 表组级别 表级别 列级别 说明
SELECT ✔️ ✔️ ✔️ ✔️ 查询数据。
LOAD DATA ✔️ ✔️ ✔️ ✖️ 导入表(分区)数据。
DUMP DATA ✔️ ✔️ ✔️ ✖️ 导出表(分区)数据。
DESCRIBE ✔️ ✔️ ✔️ ✖️ 查看数据库、表/表组信息(Global、Database)、查看表/表组信息(Table[Group])。
SHOW ✔️ ✔️ ✔️ ✖️ 列出数据库、表/表组内部对象(Global、Database)、列出表内部对象(Table[Group])。
ALTER ✔️ ✔️ ✔️ ✖️ 修改表/表组定义。
DROP ✔️ ✔️ ✔️ ✖️ 删除数据库、表/表组或分区(Global、Database)、删除表/表组或分区(Table[Group])。
CREATE ✔️ ✔️ ✔️ ✖️ 创建表/表组。
INSERT ✔️ ✔️ ✔️ ✖️ 执行Insert的权限。
DELETE ✔️ ✔️ ✔️ ✖️ 执行Delete的权限。
ALL [PRIVILEGES] ✔️ ✔️ ✔️ ✔️ 以上所有权限。

例如,执行LOAD DATA命令可以向数据库或者表导入数据,但不支持仅向表中的某一列导入数据。

注意事项

  • 权限聚合。按照Database > Table[Group] > Column由高到低的权限级别,高级别聚合低级别的所有权限。

  • 使用阿里云账号在阿里云官网开通分析型数据库MySQL版服务后即可获取创建数据库的权限,无法通过授权方式获取创建数据库的权限。

  • 部分查询操作不需要SELECT权限,例如SELECT now()

  • 导出数据需要DUMP DATASELECT权限以及导出目的地的数据写入相关权限。