#权限授予与收回
在确认被授权用户是安全、可信的,且其所需权限与实际使用者身份相匹配后,可以对用户进行授权。
一旦确认某个用户或角色不再需要某项权限,应及时进行权限收回,但执行操作前还需仔细确认收回权限不会影响业务正常运行。
# 权限授予
授予给用户、角色的权限立即生效,若目标角色已被授权给某个用户,则该用户的权限也立即生效。
授予给用户或角色的角色在用户下一次登录时生效,即给用户A授予角色B,授权前已登录的用户A不具备该角色,A用户再次登录时角色B生效。
授权时,需注意:
避免给非管理员类用户授权管理类系统特权,具备管理类系统特权可能导致用户发起损坏系统表等高危操作,产生高危故障。
慎重将系统用户下的对象特权授给不信任用户,可能导致系统表损坏等高危操作,产生高危故障。
发起授权时,确保被授权的用户或角色安全可信。且需确认角色所具备的权限范围是否超出本次授权诉求,防止授权超出业务需求,引入数据库安全风险。
慎重将DBA角色授予用户,具备DBA角色的用户(关闭三权分立时)被允许发起任意操作,包括损坏系统表等高危操作,可能导致数据库出现高危故障。
慎重将权限授予PUBLIC角色,授权后所有用户都将具备该权限。
# 前提条件
根据不同的操作场景,对授权操作执行者的权限要求不同:
| 授权场景 | 授权者(执行者) | 被授权对象(接受者) | 可选权限范围 |
|---|---|---|---|
| 基于特权直接授权 | 满足如下条件之一: * 具备GRANT ANY PRIVILEGE系统特权。 * 具备SECURITY_ADMIN安全管理员角色。 | 用户 角色(不能使用WITH OPTION) | 系统特权 |
| 满足如下条件之一: * 是目标对象的所有者。 * 具备GRANT ANY OBJECT PRIVILEGE对象特权。 * 具备SECURITY_ADMIN安全管理员角色。 | 用户 角色(不能使用WITH OPTION) | 对象特权 | |
| 基于角色间接授权 | 满足如下条件之一: * 具备GRANT ANY ROLE系统特权。 * 具备SECURITY_ADMIN安全管理员角色。 | 用户 角色(不能使用WITH OPTION) 在存算一体分布式集群部署中,无法对角色授予角色 | 已存在的所有角色 |
| 基于用户传递权限 | 已具备目标特权/角色,且具备对应的ADMIN/GRANT OPTION。 | 用户 角色(不能使用WITH OPTION) | 执行者所具备的带有 ADMIN/GRANT OPTION的特权/角色 |
# 操作步骤
确认被授权对象的权限需求:
“最小权限”原则:根据业务需求分析整理被授权对象的需要使用的最小权限集合,若已有角色承载了恰当的权限集,也可以考虑直接为用户授予相应角色。
是否需要权限转授:如可能需要转授某个权限/角色,则需指定WITH ADMIN|GRANT OPTION。
使用满足授权者条件的用户登录YashanDB。
执行GRANT语句,对另一个用户或角色发起授权。
-- 直接授予系统特权CREATE ANY TABLE GRANT CREATE ANY TABLE TO sales; -- 直接授予系统特权SELECT ANY TABLE,并允许sales用户转授该权限给其他用户/角色 GRANT SELECT ANY TABLE TO sales WITH ADMIN OPTION; -- 直接授予表area的SELECT权限,并允许sales用户转授该权限给其他用户/角色 GRANT SELECT ON area TO sales WITH GRANT OPTION; -- 授予RESOURCE角色,从而间接授予该角色的权限集 GRANT RESOURCE TO sales1 WITH ADMIN OPTION; -- 用户sales转授系统特权SELECT ANY TABLE给用户sales1 conn sales/sales GRANT SELECT ANY TABLE TO sales1;Note:
授权SYSDBA和SYSOPER角色时,指定WITH ADMIN OPTION无效。
# 权限收回
收回授予给用户、角色的权限立即生效,若目标角色已被授权给某个用户,则该用户的权限收回也立即生效。
收回授予给用户或角色的角色在用户下一次连接时生效,即收回用户A的角色B,收回前已登录的用户A依然具备B角色,A用户再次登录时失去B角色。
在存算一体分布式集群部署中,无法对角色授予角色,因此也不存在对角色收回角色。
Caution:
收回权限可能会引起某些数据库业务无权限运行,请谨慎操作。
# 前提条件
具备GRANT ANY PRIVILEGE系统特权的用户可收回系统特权的授予。
具备GRANT ANY OBJECT PRIVILEGE对象特权的用户可收回对象特权的授予。
具备GRANT ANY ROLE系统特权的用户可收回角色的授予。
具备SECURITY_ADMIN安全管理员角色的用户可收回任何特权/角色。
普通用户只能收回自己授出的权限,即使通过指定WITH GRANT|ADMIN OPTION语句实现了权限跨用户传递,也不能跨用户收回。
# 操作步骤
使用满足授权者条件的用户登录YashanDB。
执行REVOKE语句,对另一个用户/角色发起授权收回操作。
-- 收回用户sales对表area的SELECT权限 REVOKE SELECT ON area FROM sales; -- 收回用户sales1的RESOURCE角色 REVOKE RESOURCE FROM sales1; -- 用户sales可以收回转授给sales1的系统特权SELECT ANY TABLE conn sales/sales REVOKE SELECT ANY TABLE FROM sales1;

