grant
语法
grant(userId|groupId, accessType, [objs])
参数
userId | groupId 是表示用户名或组名的字符串。
accessType 权限类型/内存限制。
objs 标量或向量,表示权限类型的应用对象/约束规则。
accessType 和 objs 的取值请参照 用户权限管理 权限类型表。
详情
grant 函数执行以下操作:
(1)授予某个用户或某个用户组权限。当 accessType = DB_OWNER 时,还支持约束某个用户只能创建指定前缀的数据库。
(2)约束某个用户查询返回结果的内存上限(指定 accessType = QUERY_RESULT_MEM_LIMIT)和发送的批量子查询占用的内存上限(指定 accessType = TASK_GROUP_MEM_LIMIT)。其功能等效于 setMemLimitOfQueryResult 函数和 setMemLimitOfTaskGroupResult 函数,区别在于 grant 只对指定用户生效(暂不支持用户组),setMemLimitOfQueryResult 函数和 setMemLimitOfTaskGroupResult 函数对所有用户生效。
管理员可以通过该命令赋予用户所有权限(accessType),但普通用户在拥有相关的 OWNER 权限后,只能通过该命令赋予以下权限:TABLE_READ, TABLE_WRITE, TABLE_INSERT, TABLE_UPDATE, TABLE_DELETE, DB_READ, DB_WRITE, DB_INSERT, DB_UPDATE, DB_DELETE, DBOBJ_DELETE, DBOBJ_CREATE 和 VIEW_EXEC。
例子
授予组”research”的所有成员读取所有数据库表的权限:
$ grant(`research, TABLE_READ, "*")
授予组”research”的所有成员读写表 dfs://db1/t1
的权限:
$ grant(`research, TABLE_WRITE, "dfs://db1/t1")
授予组”research”的所有成员在数据库 dfs://db1
和 dfs://db2
创建表的权限:
$ grant("research", DBOBJ_CREATE, ["dfs://db1","dfs://db2"])
授予用户”AlexSmith”删除数据库的权限:
$ grant("AlexSmith", DB_MANAGE)
授予用户”AlexSmith”执行脚本的权限:
$ grant("AlexSmith", SCRIPT_EXEC)
授予用户”AlexSmith”测试脚本的权限:
$ grant("AlexSmith", TEST_EXEC)
约束用户查询所占用的内存:
指定 accessType 为 QUERY_RESULT_MEM_LIMIT,此时 objs 表示限制的内存大小,单位为 GB。下述脚本限制用户 “AlexSmith” 查询时,查询结果所占用的内存大小不能超过 4 GB。
$ grant("AlexSmith", QUERY_RESULT_MEM_LIMIT, 4)
约束用户只能创建指定前缀的数据库:
假设管理员要求限制用户 “AlexSmith” 只能创建并管理以 ddb 作为库名前缀的数据库,可以通过以下脚本实现:
$ grant("AlexSmith", DB_OWNER, "dfs://ddb*")
当指定 grant 函数的 accessType 为 DB_OWNER 时,可以指定 objs 为一个规则,目前仅支持约束用户可以创建的库名前缀,便于不同用户管理不同范围的数据库。
注意:特定的约束规则,只能通过 grant 指定,且不能通过 deny/revoke 移除。当 accessType 为 DB_OWNER 时,deny/revoke 只能对全局生效。