#角色
角色(Role)本身无权限含义,但当把一组权限赋予给某个角色后,角色即可参与到权限体系中,并能大大简化对权限的管理操作。例如,将角色授予某个用户后,该用户将拥有了这个角色当前或未来所拥有的所有权限,用户对数据库的可允许操作范围随角色变更而发生改变。
基于角色进行权限管控时,管理员对用户只需关注其角色,对角色只需关注其权限集。例如:
通过定义一个角色来划分一类用户的行为。用户的行为可能由其岗位和职能来确定,同岗位的用户可能存在相同的权限需求。
通过给用户授予特定的一个或多个角色来控制该用户的所有权限,简化授权流程。
某些情况下,通过收回用户的角色或收回角色的某个权限,快速批量收拢权限范围。
# 内置角色
YashanDB预定义了不同权限的角色,方便用户进行不同职责的管理员/用户定义。
内置管理角色列表如下:
| 角色名称 | 权限描述 |
|---|---|
| DBA | * 未开启三权分立:具有几乎所有权限(除SHUTDOWN)。 * 开启三权分立:不具有审计、安全管理相关权限,只对当前用户schema下的表、索引、自定义视图具有DML权限,但仍具有系统表与系统视图的查看权限,以及数据库的DDL权限。 |
| AUDIT_ADMIN | 具有管理数据库的审计机制的权限,例如创建审计策略、跟踪分析审计日志等。 |
| SECURITY_ADMIN | 具有为其他帐号授权、密钥管理、强制访问控制的权限。 |
| SYSDBA | 具有执行SHUTDOWN、备份、BUILD(包括yasrman、yasbak备份工具)的权限。 |
| SYSOPER | 只具有执行SHUTDOWN的权限。 |
| SYSBACKUP | 只具有执行备份、BUILD(包括yasrman、yasbak备份工具)权限。 |
将上表中的某个角色授权给一个普通用户后,该用户立即成为具备对应角色所包含的管理权限的管理员,例如被授予DBA角色的用户(简称“DBA用户”)即为数据库管理员。
内置普通角色列表如下:
| 角色名称 | 权限描述 |
|---|---|
| PUBLIC | 默认无任何权限。 所有用户都具有PUBLIC角色,为该角色授予的任何权限会将被所有用户拥有。 请谨慎调整PUBLIC角色的权限,避免引发数据泄漏安全风险,或导致依赖该权限的业务无法进行。 |
| CONNECT | 具有CREATE SESSION权限,赋予CONNECT角色的用户能够登录会话。 |
| RESOURCE | 具有CREATE TABLE、CREATE SEQUENCE、CREATE PROCEDURE、CREATE TRIGGER、CREATE TYPE的权限。 |
| SELECT_CATALOG_ROLE | 具有访问V$与GV$视图的权限。 |
| AUDIT_VIEWER | 具有查看系统审计项视图的权限。 |
| LBAC_DBA | 具有执行行访问控制设置的权限,赋予LBAC_DBA角色的用户能够执行行访问控制的各种设置。 |
| SYSKM | 具有执行钱包操作的权限,赋予SYSKM角色的用户能够执行钱包相关的ADMINISTER KEY MANAGEMENT语句。 |
# 自定义角色
用户可根据自身权限机制设计对应的角色,每个角色需包含下列要素:
角色名称:与角色所包含的权限集合相关联的有意义的标识符,要求全局唯一,一经创建不得修改。另外,角色名称不能与用户名、特权名称相同。
权限集:将某个权限/角色授予(GRANT)给目标角色。
Note:
在存算一体分布式集群部署下,不能将角色授予给另一个角色。
# 创建自定义角色
# 前提条件
执行角色创建操作的用户,需具备CREATE ROLE权限,授权操作请查阅权限授予与收回。
执行角色权限集配置的用户,需具备对应特权/角色的GRANT权限(GRANT ANY PRIVILEGE、GRANT ANY OBJECT PRIVILEGE或GRANT ANY ROLE)。
# 操作步骤
使用具备相应权限的用户登录YashanDB。
执行CREATE ROLE语句创建自定义角色。
CREATE ROLE reader;执行GRANT语句将目标权限授予给新建的角色。
GRANT READ ANY TABLE TO reader;
# 删除自定义角色
若某个自定义角色无需再使用时,可将其删除。
自定义角色被删除后,该角色与权限的包含关系将不复存在,所有被授予该角色的用户也将失去对应权限(可能存在延时)。
删除自定义角色时,会同时删除该角色的所有授权记录。
Caution:
请谨慎删除自定义角色,误操作可能导致业务因权限不足无法正常运行。
# 前提条件
执行角色删除操作的用户,需具备DROP ANY ROLE权限,授权操作请查阅权限授予与收回。
# 操作步骤
使用具备相应权限的用户登录YashanDB。
执行DROP ROLE语句删除某个自定义角色。
DROP ROLE reader;

