金仓数据库KingbaseES 强制访问控制3-:策略的配置

关键字:

KingbaseES、强制访问控制、标记与策略、人大金仓、KingbaseES

标记与强制访问控制

KingbaseES支持标记和强制访问控制,保护用户数据,防止非法窃取。强制访问控制(Mandatory AccessControl——MAC)与自主访问相比,MAC提供更严格和灵活的控制方式。MAC首先为所控制的主体和客体指派安全标记,然后依据这些标记进行访问仲裁。并且,只有主体标记能支配客体标记时才允许主体访问。标签和强制访问的定义如下:

标记

标记是由等级、范围和组三种组件构成,三种组件中等级为必须选项,范围和组可选,标记是可以比较的,三种组件的比较规则各不相同,其比较结果的含义是代表了数据的敏感程度。如果赋予用户某些标记,然后给数据再赋予标记,这样,将用户的标记和数据的标记进行比较,按照一定规则来决定用户是否可以对数据进行访问。

强制访问控制

用于将系统中的信息分密级和类进行管理,以保证每个用户只能访问到那些被标明可以由他访问的信息的一种访问约束机制。通俗的来说,在强制访问控制下,用户(或其他主体)与元组(或其他客体)都被标记了固定的安全属性(如安全级、访问权限等),在每次访问发生时,系统检测安全属性以便确定一个用户是否有权访问该元组。

开启强制访问控制

  1. 加载插件:修改 kingbase.conf 文件中 shared_preload_libraries 参数,并重启数据库。
  2. 控制参数:

sysmac.enable_mac(boolean) :控制强制访问控制是否打开,由sso负责开关,默认为false,表示不启用强制访问控制。

sysmac.enable_col_mac(boolean) :控制列级强制访问控制是否打开,由sso负责开关,默认为false,表示不启用列级强制访问控制。

为客体配置策略

可以配置强访策略的数据库对象我们将其称为客体。

Kingbase支持为客体配置以下强访策略:

  1. 对象级:

为对象设置标记:

SYSMAC.APPLY_OBJ_POLICY(

policy_name TEXT,

object_type TEXT,

schema_name TEXT,

object_name TEXT,

label BOOL

)

将策略应用于指定模式下对象。支持的对象有:“TABLE”、“VIEW”、“INDEX”、“PROCEDURE”、“FUNCTION”、“PACKAGE”、“SEQUENCE”、“TRIGGER”、 “SYNONYM”。可通过系统表sysmac.sysmac_obj查询对象标记信息。

参数说明:

policy_name:指定数据库中已经创建的安全策略名称。

object_type:指定被策略policy_name保护的对象类型。支持的对象类型有:table、view 、function、procedure、trigger、sequence、index、package、synonym。

schema_name:指定数据库下的模式名称。

object_name: 指定被策略policy_name保护的对象名称。

label:指定标记字符串

删除对象标记:

SYSMAC.DROP_OBJ_POLICY(

policy_name TEXT,

object_type TEXT,

schema_name TEXT,

object_name TEXT,

)

功能:

将策略从指定模式下的对象上移除。

参数说明:

policy_name:指定数据库中已经创建的安全策略名称。

object_type:指定被策略policy_name保护的对象类型。支持的对象类型有:table、view 、function、procedure、trigger、sequence、index、package、synonym 。

schema_name:指定数据库下的模式名称。

object_name: 指定被策略policy_name保护的对象名称。

  1. 列级:

增加列级标记

语法格式:

SYSMAC.SET_COLUMN_LABEL(

policy_name TEXT,

object_type TEXT,

schema_name TEXT,

object_name TEXT,

label BOOL

)

功能:

将策略应用于指定表下列级对象,列所属的表对象只能是普通表。 启用列级强访需要开启参数sysmac.enable_col_mac。可通过系统表sysmac.sysmac_column_label 查询列上的标记信息。

参数说明:

policy_name:指定数据库中已经创建的安全策略名称。

schema_name:指定数据库下的模式名称。

table_name: 指定被策略policy_name保护列的所属表名。

object_name: 指定被策略policy_name保护的列名称。

label:指定标记字符串,关于标记的字符串的语法格式请参见 数据标记 。

删除列级标记

语法格式:

SYSMAC.DROP_COLUMN_LABEL(

policy_name TEXT,

schema_name TEXT,

table_name TEXT,

object_name TEXT,

)

功能:

将策略从指定表下的列级对象上移除。

参数说明:

policy_name:指定数据库中已经创建的安全策略名称。

schema_name:指定数据库下的模式名称。

table_name: 指定被策略policy_name保护列的所属表名。

object_name: 指定被策略policy_name保护的列名称。

  1. 行级:

对用户表应用行级策略

语法格式:

SYSMAC.APPLY_TABLE_POLICY (

policy_name TEXT,

schema_name TEXT,

table_name TEXT

)

功能:

将策略应用于指定模式下的用户表。粒度是行级。

参数说明:

policy_name:指定数据库中已经创建的安全策略名称。

schema_name:指定数据库下的模式名称。

table_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:指定从表上移除策略时是否移除策略列。

参考文档:

《KingbaseES产品手册-标记和强制访问控制》

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐