开发者社区 问答 正文

如何使用ACL进行权限管理?


前文提到,类似MySQL,分析型数据库中的数据库创建者可以使用GRANT/REVOKE语句进行授权和权限回收。

进行授权


SQL语法


GRANT privilege_type [(column_list)] [, privilege_type [(column_list)]] ... ON [object_type] privilege_level TO user [, user] ...

返回值


被授权用户

user: 'user_name'[@'host_name']
  • user_name 和 host_name 必须使用单引号或双引号,如 'ALIYUN$test-user@aliyun.com'@'%'
  • 目前,host_name 只支持 % ,即不支持指定Host
  • 可以写成 user_name ,等价于 'user_name'@'%'

权限

  • privilege_type 为具体的权限类型,每一级对象拥有的权限类型参见6.2节

  • [(column_list)] 为可选,当对象级别为表时,这里可以填写列的列表,进行针对具体列的授权

  • [object_type] 为可选,标明权限对象的类型,如Database、Table、TableGroup等,建议填写

  • privilege_level 为被授权对象的表达式,填写方法见6.2节

例子GRANT describe, select ON tablegroup db_name.table_group_name TO user 'ALIYUN$ test_user@aliyun.com'@'%';GRANT describe, select (col1, col2) ON table db_name.table__name TO user 'ALIYUN$ test_user@aliyun.com';

权限回收


SQL语法

REVOKE privilege_type [(column_list)] [, privilege_type [(column_list)]] ... ON [object_type] privilege_level FROM user [, user] ...

返回值

  • 在语法上与授权语句基本一致


查看用户权限


SQL语法

SHOW GRANTS [FOR user] ON [object_type] privilege_level

返回值

'GRANT ALL ON db_name.* TO user' 'GRANT SELECT(column_name) ON db_name.table_name TO user'

查看用户权限
  • 不指定用户或是指定用户即当前用户,则列出当前用户在指定数据库上被授予的权限
  • 否则,列出当前用户在指定数据库上授予指定用户的权限


其它相关内容


权限的默认约定
  • 数据库创建者拥有在该数据库上的所有权限
  • 表(组)创建者拥有在该表(组)上的所有权限
  • 其他数据库用户拥有被各数据库拥有者授予的权限
  • SHOW DATABASES 语句不进行权限检查,可在不指定数据库的前提下之星,会返回用户所有拥有权限的数据库列表
  • 创建数据库时不检查权限,但用户必须通过阿里云官网开通了分析型数据库服务并处于服务正常运行的状态

授权/回收权限的权限
  • 数据库拥有者(暨创建者)在该数据库上执行 Database 及其级别以下的授权/回收权限,如 SELECT ON db_name.*
  • 其他数据库用户目前无法执行授权/回收权限操作

设置ip白名单
目前分析型数据库支持设置DB粒度的ip访问白名单,该功能目前处于内测,有需要的客户可以提交工单索取设置方法和注意事项。

展开
收起
nicenelly 2017-10-26 15:38:29 2366 分享 版权
阿里云 AI 助理回答

在分析型数据库中,授权和权限回收是通过GRANTREVOKE语句来实现的,类似于MySQL。以下是关于如何使用这些命令进行权限管理的详细说明:

授权(GRANT)

语法:

GRANT privilege_type [(column_list)] [, privilege_type [(column_list)]] ... 
ON [object_type] privilege_level 
TO user [, user] ...
  • privilege_type: 指定要授予的权限类型,如SELECT, INSERT, UPDATE, 等。
  • column_list: 当授权对象为表且权限类型涉及SELECT时,可指定列名列表,实现对特定列的授权。
  • object_type: 权限对象类型,例如Database, Table, TableGroup等,虽然标记为可选,但在某些场景下明确指定有助于理解。
  • privilege_level: 被授权资源的表达式,如*.*代表整个集群、db_name.*代表特定数据库的所有权限。
  • user: 接受授权的用户账户,格式为'user_name'@'host_name',当前仅支持host_name%

示例:

GRANT describe, select ON tablegroup db_name.table_group_name TO 'ALIYUN$test_user@aliyun.com'@'%';
GRANT describe, select (col1, col2) ON table db_name.table_name TO 'ALIYUN$test_user@aliyun.com';

权限回收(REVOKE)

语法:

REVOKE privilege_type [(column_list)] [, privilege_type [(column_list)]] ... 
ON [object_type] privilege_level 
FROM user [, user] ...

此语法结构与GRANT相似,用于撤销之前赋予用户的权限。

示例:

REVOKE describe, select ON tablegroup db_name.table_group_name FROM 'ALIYUN$test_user@aliyun.com'@'%';

查看用户权限

语法:

SHOW GRANTS [FOR user] ON [object_type] privilege_level

不指定用户时,默认显示当前用户的权限;指定用户则展示该用户在指定数据库或对象上的权限。

其他注意事项

  • 数据库和表的创建者自动拥有对应级别的所有权限。
  • 除数据库创建者外,其他用户目前不能执行授权或权限回收操作。
  • 分析型数据库支持设置数据库级别的IP访问白名单,但此功能可能处于内测阶段,需通过工单申请。

综上所述,通过GRANTREVOKE语句,您可以灵活地管理分析型数据库中的用户权限,确保数据安全及操作合规性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答