GBase 8s LBAC安全标签

概述

基于标签的访问控制(Label-Based Access Control) 是GBase 8s强制访问控制的一种形式。

LBAC可以被用户来防止未经授权的访问。

  • 控制“谁”可以“看到”“什么”
  • 标签
  • 标签应用到数据列上—防止未经授权的用户看到
  • 标签应用到数据行上—防止未经授权的用户看到

设计LBAC 主要需要定义三个部分:

  • 安全标签
  • 安全组件:定义一个或多个逻辑类别,其值可在安全策略中用于确定用户读取或写入数据的请求是被接受还是被拒绝
  • 安全策略:用于定义了一组安全标签的安全标签组件,将该安全标签与一组访问规则相关联

简单举例,现有一个场景管理部门员工信息,需要设计LBAC,员工部门分为 部门A 部门B,员工信息需要划分为 普通、敏感。

按照LBAC的定义逻辑,管理部门员工信息,需要创建一个安全策略。其次,一共有两个维度需要权限区分,部门与信息安全等级,则创建两个安全组件,即部门与信息安全等级。在每个组件维度中,根据场景描述需要设置标签,部门维度需要 标签 部门A 与标签 部门B,信息安全等级需要标签 普通与标签 敏感,设计如下。

安全策略:管理员工信息,由安全组件 部门、信息安全等级定义
安全组件 部门:包括 标签 部门A、标签 部门B
安全组件 信息安全等级:包括 标签 普通 标签 敏感

给对应用户赋予对应标签,给员工信息表赋予对应权限分离标签,即可实现基于LBAC的访问控制。

LBAC演示用例

数据准备,准备三个操作系统用户,uesr01、user02、user03,并赋权操作系统用户足够的权限操作库表。

useradd user01
useradd user02
useradd user03
grant resource to user01;
grant resource to user02;
grant resource to user03;

我们准备以超级管理员gbasedbt完成LBAC定义,因此需要赋予 dbsecadm权限。

grant dbsecadm to gbasedbt;

首先确保以 gbasedbt 操作如下步骤,创建安全组件 等级lvl 与分组 gp。

create security label component lvl array['TOP', 'LOW'];
create security label component gp set{'A', 'B'};

基于已创建的安全组件,创建安全策略 pol 。

create security policy pol components lvl, gp;

根据需求,创建需要的安全标签,设计如下。并分配标签到用户 uesr01、user02、user03。

部门 gp

等级 lvl

label1

A、B

TOP

label2

A

LOW

label3

B

TOP

lvl_TOP

TOP

lvl_LOW

LOW

create security label pol.label1
component lvl 'TOP',
component gp 'A', 'B';


create security label pol.label2
component lvl 'LOW',
component gp 'A';


create security label pol.label3
component lvl 'TOP',
component gp 'B';

create security label pol.lvl_TOP component lvl 'TOP';

create security label pol.lvl_LOW component lvl 'LOW';

grant security label pol.label1 to user user01 for all access;

grant security label pol.label2 to user user02 for all access;

grant security label pol.label3 to user user03 for all access;

grant exemption on rule idslbacwritearray writedown for pol to user user01;
grant exemption on rule idslbacwritearray writedown for pol to user user02;
grant exemption on rule idslbacwritearray writedown for pol to user user03;

创建表 tab1 ,规定 id 等级为 TOP,name 列等级为 LOW,并设置行级标签 flag IDSSECURITYLABEL。

CREATE TABLE TAB1 (id int  COLUMN SECURED WITH lvl_TOP ,name varchar(20) COLUMN SECURED WITH lvl_LOW,flag IDSSECURITYLABEL) SECURITY POLICY pol;

分别以用户user01,user02,user03连接数据,并各自插入一行数据。

---不指定,默认为该用户持有标签
--user01
--插入
insert into tab1(id,name) values(1,'from user01');

--user02
--报错,无ID列标签
insert into tab1(id,name) values(2,'from user02');
--插入
insert into tab1(name) values('from user02');

--user03
insert into tab1(id,name) values(3,'from user03');

每个用户将根据自己的标签插入数据,可见无 等级 TOP权限的用户user02 无法插入到 id列,实现了数据列上的权限分离。可自行实验查询表数据。user02与user03仅可查看自己所持有标签的数据,无法看到彼此。user01可以看到全部数据,因为user01持有标签 部门 A与部门 B,实现了数据行上的权限分离。