ANY权限是Vastbase中的一种特殊的管理权限,用户能够通过ANY权限执行更广泛的操作,更加便利的管理数据库。
本文将为您介绍ANY权限管理的相关原理。
ANY权限管理相关解释
ANY权限管理,是对数据库内的某一类对象的所有实体进行特定的权限管理。
例如执行如下语句:
GRANT SELECT ANY TABLE TO USER1;
就表示用户USER1拥有对当前数据库中所有的表进行SELECT操作的权限,但没有对其他数据库中的任意表进行SELECT操作的权限。
ANY权限管理的原理
权限再授权权限
用户拥有把授予他的ANY权限再授予其他用户的权限的权限。
用户拥有权限的角色列表
当执行grant u1 to u2,表示将角色u1授予u2,那么u2会拥有u1的所有权限。这样的所有被授予用户u2的角色就是用户拥有权限的角色列表。
一、权限信息的记录
ANY权限信息存储在系统表gs_db_privilege,每一个ANY权限对应gs_db_privilege表中的一个元组。由被授权者的OID、被授予的ANY权限、是否拥有将该权限授予其他用户的权限三部分组成。
字段解释:
ANY权限的授予和回收,对应的是gs_db_privilege系统表中数据的增加和删除。
二、权限授予
权限授予有两个操作方式:
(1)授予ANY权限,例如:
GRANT SELECT ANY TABLE TO USER1;
(2)授予ANY权限并授予权限再授权权限(admin option),例如:
GRANT SELECT ANY TABLE TO USER1 WITH ADMIN OPTION;
权限授予流程如下所示:
- 检查要授予用户的ANY权限是否存在。若不存在,构造一条新的权限记录数据插入到系统表gs_db_privilege中并结束;若存在,则执行步骤2
- 判断是否需要给该目标用户添加再授予权限。若不是则直接退出结束,若是则执行步骤3
- 更新系统表gs_db_privilege该权限信息中的admin_option字段为true
三、权限回收
对应于权限授予,权限回收也有两种用法:
(1)仅回收权限再授权权限,例如:
REVOKE ADMIN OPTION FOR SELECT ANY TABLE FROM USER1;
(2)回收ANY权限,例如:
REVOKE SELECT ANY TABLE FROM USER1;
流程如下图所示:
- 判断要回收的权限的是否存在,若不存在则结束返回;若存在则执行步骤2
- 判断是仅回收权限的再授权权限,还是回收整个权限。若仅回收权限再授权权限,则执行步骤3;否则执行步骤4
- 更新权限信息,将权限再授权权限字段admin_option修改为false
- 从系统表gs_db_privilege中删除该条权限信息
四、权限检查
ANY权限检查就是在用户访问对象时,检查用户是否拥有对对象进行操作的ANY权限。流程如下图所示:
- 根据本次访问的对象和操作转换为需要的ANY权限。例如执行select * from t1,根据select操作和查询的是表,转换为“select ANY table”权限
- 获取到当前执行用户拥有权限的所有角色列表
- 遍历列表中的每一个角色
- 对每一个角色,根据其OID和本次操作需要的ANY权限从gs_db_privilege系统表中查询角色是否拥有ANY权限
- 如果未查询到结果,说明当前被遍历的角色没有本次操作需要的ANY权限,直接进入下一次循环,继续步骤4检查角色列表中的下一个角色;如果查询到结果,说明当前被遍历的角色拥有本次操作需要的ANY权限
- 继续判断本次操作是否是授予/回收ANY权限操作,如果不是,权限检查已经通过,返回结果为有权限;如果是,则进入下一步判断
- 判断当前被遍历角色拥有的ANY权限的admin_option属性是否为true,为true则表示角色有对当前ANY权限再授权/回收的操作,返回结果为有权限;为false则表示角色没有对当前ANY权限再授权/回收的操作,那么进入下一次循环,继续步骤4检查角色列表中的下一个角色
通过以上操作,可以随时调整ANY权限的授予和回收,提升用户对数据库操作的能力和灵活性。