行级策略介绍
关键字:
行级策略、标记、策略、人大金仓、KingbaseES
行级策略概述
1.1概述
不同于对数据库对象设置标记,行级策略可以将数据的安全访问控制缩小到行级细粒度,利用不同等级范围的用户对表中不同行的数据写入,使表中每行都有不同的访问控制权限。
对表设置行级策略后,用户需要具有对应表的权限通过自主访问控制校验后,才能用持有的标记在表中读、写数据,标记的等级越高可操作的范围越大。访问规则分为读访问规则和写访问规则。
1.2管理行级策略语法
应用行级策略语法
SYSMAC.APPLY_TABLE_POLICY (
policy_name NAME,
schema_name NAME,
table_name NAME
)
移除行级策略语法
SYSMAC.REMOVE_TABLE_POLICY(
policy_name TEXT,
schema_name TEXT,
table_name TEXT,
drop_column BOOL
)
参数说明:
policy_name:指定数据库中已经创建的安全策略名称。
schema_name:指定数据库下的模式名称。
table_name: 指定被策略policy_name保护的表名。
drop_column:指定从表上移除策略时是否移除策略列。
示列:对表t2设置行级策略p2。
移除t2表存在的行级策略p2
1.3读写访问规则
读访问规则:
- 数据标记的等级必须小于等于用户的当前读标记等级;
- 用户会话读标记必须包含数据标记中的所有范围。
写访问规则:
- 数据标记的等级必须小于等于用户的当前写标记等级;
- 数据标记的等级必须大于等于用户的最小等级;
- 用户的会话写标记必须包含数据标记中的所有范围。
读写访问规则遵循向下读,区间写模型。用户只能读取小于等于自身安全等级的数据,只能对大于用户的最小写安全等级小于等于用户当前写安全等级的数据进行修改,且用户的读写会话标记范围需要包括数据标记中的所有范围。
二、构造行级策略场景并分析
2.1 场景一
本场景通过对表设置行级策略,并通过带标记用户输入带标记数据,利用其它用户进行访问来说明行级策略下的数据读访问规则。
步骤1:对表t2设置行级策略p2
步骤2:为用户u1设置策略p2下的标记l2:r1
步骤3:利用u1对表t2插入数据并读取t2数据
步骤4:使用未设置标记的用户u2和u3对表进行查看
步骤5:给用户u2设置标记l1:r1,并利用u2对表进行查看,发现由于等级不能达到访问仲裁要求,u2用户依旧不能读取u1用户插入的数据
步骤6:给用户u3设置标记l3:r1,并利用u3对表进行查看,由于u3设置的标记等级满足读取u1用户写入数据等级,故能够成功访问u1写入的数据。
总结:对表应用行级策略后,表中应用行级策略之前的数据会被隐藏,且表中会多一个策略列字段,该字段可以被隐藏。应用行级策略后表中的数据的读和写遵循一定的规则,用户所写入的数据只能被相同或更高权限等级的用户所查看读取,且未设置标记的用户不能查看带标记的用户在应用行级策略表中写入的数据。
2.2 场景二
本场景通过对表设置行级策略,并通过带标记用户u1对表插入带标记数据,利用带标记用户u2、u3对数据进行读写操作来说明行级策略下的读写访问规则,同时说明设置用户标记时,各个参数的具体含义。
步骤1:对表t2设置行级策略p2
步骤2:为用户u1设置p2策略下标记,其中最大读标记为l3:r1,最大写标记为l3:r1,用户写入标记为l2:r1,最小写入标记为l2:r1,默认会话标记为l2:r1。
步骤3:为用户u2设置p2策略下标记为l2:r1
步骤4:为用户u3设置p2策略下标记为l3:r1
步骤5:利用用户u1对表t1插入数值
步骤6:使用用户u2来查找表t2数据,发现能够成功查询到u1插入的数据且能够写入数据
步骤7:使用用户u3来查找用户表t2数据,发现能够成功查询到u1插入的数据但不能够改写数据
总结:对用户设置的用户写入标记代表着用户写入表中的行级数据标记的等级,例如上文用户u1设置的用户写入标记为l2:r1,则u1用户写入表t2中的数据值c1=112,c2=221的标记等级为l2:r1,当用户u2进行查询时,由于u2的读写标记为l2:r1,对行级数据c1=112,c2=221的读写操作支持,故能够进行操作,对于用户u3,由于其读标记值为l3:r1,对于读访问规则满足,但由于其最小写标记等级为l3:r1,对于写访问规则中第二条“数据标记的等级必须大于等于用户的最小等级”,其不满足,所以不能对数据进行更改。
三、总结
不同于对表设置标记,对表设置行级策略遵循上读下写原则,用户所写入的数据只能被相同或更高权限等级的用户所查看读取,且未设置标记的用户不能查看带标记的用户在应用行级策略表中写入的数据。