人大金仓数据库KingbaseES 强制访问控制-1:强访组件

44 阅读6分钟

金仓数据库KingbaseES 客户端工具安装

关键字:

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.CREATE_POLICY (

policy_name TEXT,

column_name TEXT,

hide_column BOOL);

参数说明:

policy_name:指定策略的名称,该名称必须在数据库中唯一。

column_name:当策略应用于表上时,将自动在表上增加一列,该参数就是用于指定策略列的名称。该名称必须在数据库中唯一。

hide_column:指定当策略用于表上时,是否隐藏策略列。TRUE代表隐藏,FALSE代表不隐藏。

删除策略:

SYSMAC.DROP_POLICY (

policy_name TEXT,

drop_column BOOL);

参数说明:

policy_name:指定要删除的安全策略名称。

drop_column:指定是否删除受到安全策略保护的表中的策略列。TRUE代表删除,FALSE代表不删除。

    1. 等级

一个标记中必须有且只有一个等级,等级之间大小为level_id之间直接的数值比较,数值越大等级越高。

创建等级:

SYSMAC.CREATE_LEVEL(

policy_name TEXT,

level_name TEXT,

levid SMALLINT)

参数说明:

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

level_name:指定等级的名称,等级名称在策略下唯一。

levid:指定等级的ID值,等级ID的取值范围为[1,9999],并在策略下唯一。

删除等级有两种方式:

SYSMAC.DROP_LEVEL(policy_name TEXT, level_name TEXT)

SYSMAC.DROP_LEVEL(policy_name TEXT, levid SMALLINT)

参数说明:

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

level_name:指定等级的名称。

levid:指定等级的ID值。

    1. 范围

一个标记中可以包含零个到多个范围,标记之间范围的比较为集合的形式,若由同一策略下的范围组成的集合A包含集合B中的全部范围,则说明A的范围大于B。

创建范围:

SYSMAC.CREATE_COMPARTMENT (

policy_name TEXT,

comp_name TEXT,

comp_id SMALLINT)

参数说明:

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

comp_name:指定范围的名称,范围名称在策略下唯一。

comp_id:指定范围的ID值,范围ID的取值范围为[1,9999],并在策略下唯一。

删除范围有两种方式:

SYSMAC.DROP_COMPARTMENT(policy_name TEXT,comp_name TEXT)

SYSMAC.DROP_COMPARTMENT(policy_name TEXT,comp_id SMALLINT)

参数说明:

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

comp_name:指定范围的名称。

comp_id:指定范围的ID值。

一个标记下可以有零个到多个组,组与组之间存在继承关系,构成树形结构,一个组只能有一个父组,可以有多个子组。若一个组没有父组表示这个组是一个根组,同一策略下只能有一个根组,同一策略下的组一定都会在同一个树形结构中。

定义组构成的集合的从属关系:

组的集合A、B都是同一策略上的组构成的集合,若A中的每一个组都能在B中找到本身或任意祖先,则称为A从属于B。

创建组:

SYSMAC.CREATE_GROUP (

policy_name TEXT,

group_name TEXT,

group_id SMALLINT)

参数说明:

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

group_name:指定组的名称,范围名称在策略下唯一。

group_id:指定组的ID值,范围ID的取值范围为[1,9999],并在策略下唯一。

删除组有两种方式:

SYSMAC.DROP_GROUP(policy_name TEXT,group_name TEXT)

SYSMAC.DROP_GROUP(policy_name TEXT,group_id SMALLINT)

参数说明:

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

group_name:指定组的名称。

group_id:指定组的ID值。

    1. 标记

标记的语法格式:“<等级>:[<范围>{,<范围>}]:[<组>{,<组>}]”。

创建标记:

SYSMAC.CREATE_LABEL(policy_name TEXT, label TEXT,labelid INT)

参数说明:

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

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

labelid:指定标记的ID值,标记ID的取值范围是[1,99999999],并且必须是同一数据库下唯一。

修改标记:

SYSMAC.ALTER_LABEL(policy_name TEXT, label TEXT,newlabel TEXT)

SYSMAC.ALTER_LABEL(policy_name TEXT, labelid INT, newlabel TEXT)

参数说明:

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

label:指定要修改的标记字符串。

labelid:指定要修改的标记ID。

newlabel:指定新的标记字符串。

删除标记:

SYSMAC.DROP_LABEL(policy_name TEXT, label TEXT)

SYSMAC.DROP_LABEL(policy_name TEXT,labelid INT)

参数说明:

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

label:指定要删除的标记字符串。

labelid:指定要删除的标记ID。

参考文档:

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