#权限授予与收回

在确认被授权用户是安全、可信的,且其所需权限与实际使用者身份相匹配后,可以对用户进行授权。

一旦确认某个用户或角色不再需要某项权限,应及时进行权限收回,但执行操作前还需仔细确认收回权限不会影响业务正常运行。

# 权限授予

授予给用户、角色的权限立即生效,若目标角色已被授权给某个用户,则该用户的权限也立即生效。

授予给用户或角色的角色在用户下一次登录时生效,即给用户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的特权/角色

# 操作步骤

  1. 确认被授权对象的权限需求:

    • “最小权限”原则:根据业务需求分析整理被授权对象的需要使用的最小权限集合,若已有角色承载了恰当的权限集,也可以考虑直接为用户授予相应角色。

    • 是否需要权限转授:如可能需要转授某个权限/角色,则需指定WITH ADMIN|GRANT OPTION。

  2. 使用满足授权者条件的用户登录YashanDB。

  3. 执行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语句实现了权限跨用户传递,也不能跨用户收回。

# 操作步骤

  1. 使用满足授权者条件的用户登录YashanDB。

  2. 执行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;
    
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流