GaussDB-基于标签的强制访问控制
GaussDB-基于标签的强制访问控制
可获得性
本特性自503.2.0版本开始引入。
特性简介
基于标签的强制访问控制特性支持用户对主体和客体设置安全标签,并基于系统设定好的强制访问控制策略规则执行访问控制。通过给主体(用户或角色)和客体(表或表的列)设置合适的安全标签来控制用户/角色可以操作数据库的哪些表或表的列。
系统新增语法和系统表支持安全标签的创建删除和记录,然后在针对数据库表或表的列进行权限校验的位置,增加主体和客体安全标签的比较逻辑,通过比较安全标签级别和范围是否符合强制访问控制策略规则来决定校验是否通过,不通过则拒绝访问。
客户价值
基于标签的强制访问控制是由系统管理人员设置主体和客体的安全标签,系统会按照严格的强制访问控制策略进行访问控制,规则由系统决定,不能更改,从而对数据库中的敏感信息提供更严格的权限控制。
特性描述
首先用户根据业务需要创建由等级和范围组成的安全标签,并将安全标签分别应用到主体(用户或角色)和客体(表或表的列)上。然后当强制访问控制检查开关打开(enable_mac_check=on),用户执行DML操作时,系统会自动根据内置的基于安全标签的强制访问控制策略校验主体是否被允许访问客体,如果校验不通过,则访问失败。
- 安全标签由等级和范围两部分组成,两者中间用冒号分隔,形式如:等级类别:范围类别,其中等级类别有且仅由一个等级组成,范围类别可由多个范围组成,但至少需要有一个范围,例如“L1:G2,G41,G6-G27”。
- 等级分类中有1024个等级,命名为Li,其中1≤i≤1024,等级满足偏序关系(若i ≤ j,则Li ≤ Lj),例如等级L1小于等级L3。
- 范围分类中有1024个范围,命名为Gi,其中1≤i≤1024,范围之间无法比较大小,但可以进行集合运算,多个范围之间用逗号分隔,连字符表示区间,例如{G2-G5}表示{G2,G3,G4,G5},集合{G1}是集合{G1,G6}的子集。
- 等级和范围的首字母L和G均为大写;L和G之后至少要有一个数字字符,且第一位非零,不允许出现其他非数字字符;{Gxxx-Gyyy}形式中数字yyy必须大于等于xxx。
- 不符合要求的等级和范围均为非法输入,系统会报错。
基于安全标签的强制访问控制策略规则由系统内置设定,用户不能更改:
- 插入(INSERT)策略:只有主体安全标记等级小于等于客体安全标记等级且主体安全标记范围是客体安全标记范围的子集时才允许插入数据。
- 查询(SELECT)策略:只有主体安全标记等级大于等于客体安全标记等级且主体安全标记范围是客体安全标记范围的超集时才允许查询数据。
- 修改(UPDATE)和删除(DELETE)策略:只有主体安全标记等级等于客体安全标记等级且主体安全标记范围等于客体安全标记范围时才允许修改和删除数据。
- 若客体未标记,则强制访问控制策略对该客体不生效。
- 若主体未标记,则不能访问任意带有标记的客体。
特性增强
无。
特性约束
- 初始用户、具有SYSADMIN权限的用户或者继承了内置角色gs_role_seclabel权限的用户有权限创建、删除和应用安全标签。
- 只有初始用户才能应用或取消初始用户和具有persistence属性的用户的安全标签。
- 对主体和客体设置安全标签,主体支持用户和角色,客体支持普通表(pg_class中的relkind='r')和普通表的列,不支持在系统表和系统表的列上应用安全标签。
- 打开强制访问控制开关后,基于安全标签强制访问控制与原有的自主访问控制(ACL权限和ANY权限)是“与”的关系,需要都满足才能访问成功。
- 出于防呆考虑,初始用户和系统管理员默认也受强制访问控制限制,但是可以随时更改或取消安全标签来使自己满足强制访问控制策略规则。
- 对于设置了安全标签的表,需要谨慎授予其他用户对该表的trigger权限,以免其他用户利用触发器绕过强制访问控制策略规则。
依赖关系
无。

浙公网安备 33010602011771号