用 IDS 中基于标签的访问控制支持保护数据
2008-11-17 16:34:51 来源:WEB开发网简介
身份失窃和数据泄露是美国增长最快的犯罪类型之一。罪犯窃取个人数据进行欺诈和获取钱财,比如社会保险号和信用卡号。罪犯通过计算机网络、电子邮件、邮件、废纸篓和很多其他地方获得这种数据。虽然公司尽最大努力阻止入侵者入侵网络和敏感数据,但是超过 70% 的数据泄露是由雇员造成的。为了防范入侵者,大多数数据库使用验证来确认用户与其提供的身份是否相符,并使用权限和特权来控制数据库和及其中的对象和数据的访问。然而,现有的访问控制机制要么是不够好,要么是开销过大。IDS 11 通过基于标签的访问控制(Label-Based Access Control)为这些情况提供了良好的解决方案。通过使用 LBAC,可以根据雇员的工作职责、部门或其他条件,允许或限制对个别行和列的读、写访问。
什么是 LBAC?
基于标签的访问控制(Label-Based Access Control,LBAC)是一种允许数据库系统控制数据库对象访问的机制,其根据是对象中包含的安全标签和授给访问对象的用户的安全标签。它是强制访问控制的一种形式。
IDS 中的 LBAC 实现允许控制谁可以访问一个表中个别行和列中的数据。LBAC 的功能是可配置的,因此可以对其进行定制,满足用户特定的安全环境。
数据库安全管理员(被授予新的 DBSECADM 角色的用户)执行所有 LBAC 配置。数据库安全管理员通过创建安全策略来配置 LBAC 系统。安全策略描述一个标准,用于决定谁有权访问特定的数据。创建安全策略之后,安全管理员将创建安全策略中的安全标签。
安全标签创建完成之后,可以将它与一个表中个别的列和行相关联,从而保护存放在那里的数据。数据库安全管理员通过向用户授予安全标签来允许他们访问受保护的数据。当一个用户试图访问受保护的数据时,要将他的安全标签与保护该数据的安全标签进行比较。如果用户的安全标签强于数据的安全标签,则访问被允许;否则,访问被拒绝。
数据库安全管理员还可以为用户授予豁免权。豁免权使原本安全标签权限不足的用户可以访问受保护数据。安全标签和豁免权统称为 LBAC 凭证。
数据库安全管理员(DBSECADM)
数据库安全管理员(DBSECADM)是一个新的内置角色,用于执行所有与安全相关的管理,包括 LBAC 安全基础设施的设置。它是一个服务器级的角色,只能由数据库服务器管理员(DBSA)授予。
由 DBSECADM 执行的 LBAC 安全基础设施设置包括:设置安全标签组件、安全策略、安全标签,向用户授予安全标签和豁免权,以及通过附加策略保护表。
DBSA 可以像下面这样将 DBSECADM 角色授给用户:
GRANT DBSECADM TO 'lynette', 'manoj';
安全标签组件
安全标签组件是用于安全策略和安全标签的构建块。有三种类型的安全标签组件:数组、集合和树。
数组安全标签组件:数组是一组有序的元素,可用于表示简单的层次结构。在数组中,元素出现的顺序很重要。第 1 个元素比第 2 个元素的级别高,第 2 个元素比第 3 个元素的级别高。一个数组中最多可以有 64 个不同的元素。
数组安全组件的一个例子是企业中数据的敏感级别:
图 1. 数组组件
DBSECADM 可以像下面这样创建数组安全组件:
CREATE SECURITY LABEL COMPONENT level ARRAY [
'Trade Secret', 'Secret', 'Confidential', 'Public'];
集合安全标签组件:集合是一组无序的元素。在集合中,元素出现的顺序不重要。一个集合中最多可以有 64 个不同的元素。
集合安全组件的一个例子是企业中的部门:
图 2. 集合组件
DBSECADM 可以像下面这样创建集合安全组件:
清单 1. 创建集合安全组件
CREATE SECURITY LABEL COMPONENT department SET {
'Product Development', 'Quality Assurance', 'Marketing', 'Sales', 'HR',
'Finance'};
树安全标签组件:树是一个元素集合,用于表示有多个节点和分支的复杂层次关系。一棵树中最多可以有 64 个不同的元素。
树安全组件的一个例子是企业的运营区域。
图 3. 树组件
DBSECADM 可以像下面这样创建树安全组件:
清单 2. 创建树安全组件
CREATE SECURITY LABEL COMPONENT region TREE (
'Worldwide' ROOT,
'Americas' UNDER 'Worldwide',
'Europe' UNDER 'Worldwide',
'Asia Pacific' UNDER 'Worldwide',
'USA' UNDER 'Americas',
'Canada' UNDER 'Americas',
'UK' UNDER 'Europe',
'Australia' UNDER 'Asia Pacific');
安全策略
安全策略定义安全标签的组成,并指定控制敏感数据的访问的规则。一个安全策略由一些安全标签组件组成。一个安全策略中最多可以有 16 个不同的安全组件。
DBSECADM 可以像下面这样创建安全策略:
清单 3. 创建安全策略
CREATE SECURITY POLICY MegaCorp
COMPONENTS level, department, region
WITH IDSLBACRULES;
安全标签
安全标签是应用到行和列上以保护数据的数据库对象,将安全标签授给用户时他们才可以访问受保护的数据。一个安全标签归属于一个安全策略,并且为安全策略中的每个安全组件包含一个值。安全组件上下文中的一个值是一个列表,包含该组件所允许的 0 到多个元素。用于数组类型的组件的值可以包含 0 个或 1 个元素,用于集合和树类型的组件的值可以包含 0 到多个元素。
DBSECADM 可以像下面这样创建安全标签:
清单 4. 创建安全标签
CREATE SECURITY LABEL MegaCorp.director
COMPONENT level 'Secret',
COMPONENT department 'Product Development', 'Quality Assurance',
COMPONENT region 'USA';
安全标签被应用到数据上,以保护该数据。可以将安全标签授给用户,允许他们访问受保护的数据。对于一个安全策略,每个用户最多只能被授予 2 个安全标签 — 一个用于读,另一个用于写。对于读和写访问,用户还可以拥有相同的标签。当一个用户试图访问受保护的数据时,必须将他的安全标签与保护数据的安全标签进行比较。如果用户的安全标签强于数据的安全标签,则可以访问。
DBSECADM 可以像下面这样向用户授予安全标签:
清单 5. 授予安全标签
GRANT SECURITY LABEL MegaCorp.director TO 'john' FOR READ ACCESS;
GRANT SECURITY LABEL MegaCorp.manager TO 'john' FOR WRITE ACCESS;
GRANT SECURITY LABEL MegaCorp.director TO 'susan' FOR ALL ACCESS;
访问规则
访问规则可以划分为两类:读访问规则和写访问规则。当用户试图读带安全标签的数据时,则应用读访问规则。当用户试图插入、更新或删除带安全标签的数据时,则应用写访问规则。IDS 有一组预定义的读和写访问规则,它们被统称为 IDSLBACRULES。当一个用户试图访问带安全标签的数据时,必须将用户的安全标签与保护数据的安全标签进行比较,并应用一个或多个预定义的规则来判断一个标签是否包含另一个标签。
读访问规则
当用户读数据时(SELECT、UPDATE 和 DELETE 操作),则应用读访问规则,读访问规则可总结如下:
IDSLBACREADARRAY:要访问数据,用户安全标签的每个数组组件必须大于或等于数据安全标签的数组组件。
IDSLBACREADSET:要访问数据,用户安全标签的每个集合组件必须包括数据安全标签的集合组件。
IDSLBACREADTREE:要访问数据,用户安全标签的每个树组件必须包括数据安全标签的树组件中的至少一个元素(或那个元素的祖先)。
写访问规则
当用户写数据时(INSERT UPDATE 和 DELETE 操作),则应用写访问规则,写访问规则可总结如下:
IDSLBACWRITEARRAY:要访问数据,用户安全标签的每个数组组件必须等于数据安全标签的数组组件。
IDSLBACWRITESET:要访问数据,用户安全标签的每个集合组件必须包括数据安全标签的集合组件。
IDSLBACWRITETREE:要访问数据,用户安全标签的每个树组件必须包括数据安全标签的树组件中的至少一个元素(或那个元素的祖先)。
豁免权
豁免权为用户绕过一个安全策略中的一个或多个访问规则提供了一种方式。如果用户拥有一个特定安全策略的特定规则的豁免权,那么当该用户试图访问受该安全策略保护的数据时,该规则将不起作用。一个用户可以拥有多个豁免权。如果用户拥有安全策略使用的每个规则的豁免权,那么该用户将拥有受那个安全策略保护的所有数据的完全访问权。
DBSECADM 可以像下面这样创建豁免权:
GRANT EXEMPTION ON RULE IDSLBACREADSET FOR MegaCorp TO 'john';
GRANT EXEMPTION ON RULE ALL FOR MegaCorp TO 'susan';
如何比较安全标签
当一个用户试图访问带标签的数据时,要将他的 LBAC 凭证与保护数据的安全标签进行比较,以确定是否允许访问。用户的 LBAC 凭证是他所持有的安全标签和豁免权。
安全标签是按组件逐一比较的。如果安全标签没有用于某个组件的值,那么设定该值为空值。在检查每个组件时,要使用适当的 IDSLBACRULES 来决定是否允许访问。如果违反任意一条访问规则,则拒绝用户访问数据。如果用户持有用于比较两个值的规则的豁免权,则不进行比较(换句话说,访问规则没有被应用到那个组件)。
表 1. 用于安全标签中不同组件的访问规则
访问的类型 | 组件 | 应用的访问规则 | 以下情况时,访问被拒绝 |
读 | ARRAY | IDSLBACREADARRAY | 用户安全标签中数组组件的值低于数据的安全标签中数组组件 |
读 | SET | IDSLBACREADSET | 有一个或多个保护值是用户所没有的 |
读 | TREE | IDSLBACREADTREE | 用户的值没有一个等于保护值或是该值的祖先 |
写 | ARRAY | IDSLBACWRITEARRAY | 用户的值高于保护值或低于保护值 |
写 | SET | IDSLBACWRITESET | 有一个或多个保护值是用户所没有的 |
写 | TREE | IDSLBACWRITETREE | 用户的值没有一个等于保护值或是该值的祖先 |
数据保护
当一个表与一个安全策略相关联,并且其中有行和/或列受到安全标签的保护时,则称该表中的数据是受保护的。一个表中的数据只能受到保护该表的安全策略的安全标签的保护。数据保护,包括添加安全策略,可以在创建表时进行,也可以在创建表之后通过修改表来实现。一个表只能与一个安全策略相关联。当用户访问一个受保护的表时,IDS 实施两个级别的访问控制。第一级是传统的自主访问控制(Discretionary Access Control,DAC)。也就是说,IDS 验证试图访问表的用户是否已经被授予在该表上执行操作所需的权限。第二级的访问控制是基于标签的访问控制(Label-Based Access Control,LBAC),这种控制可以发生在行级、列级或者同时发生在这两级。
行级保护:通过将一个安全策略附加在表上,并指定用于存储行安全标签的列,便可以在行一级上保护一个表。IDS 引入了一个新的数据类型 IDSSECURITYLABEL,用于存储行安全标签。可以在将行插入到表时将安全标签与行相关联(存储在 IDSSECUIRTYLABEL 类型的列中),也可以通过修改表,将指定的默认安全标签应用到表中所有的行上。可以通过更新行,为 IDSSECUIRTYLABEL 类型的列指定新的安全标签,从而修改行安全标签。一个表最多只能有 1 个 IDSSECURITYLABEL 类型的列。
可以像下面这样创建受行级保护的表:
清单 6. 创建行级保护标签
CREATE TABLE employee
(lbl IDSSECURITYLABEL, id int, name char(25), ssn char(15)) SECURITY
POLICY MegaCorp;
ALTER TABLE department ADD
(lbl IDSSECURITYLABEL DEFAULT ‘director’), ADD SECURITY POLICY MegaCorp;
列级保护:通过将一个安全策略附加在表上,并将一个安全标签附加在该表中的一个或多个列上,便可以在列一级上保护一个表。当一个列与一个安全标签相关联时,那个列被称作受保护的列。列安全标签不能修改。如果要修改列安全标签,必须先断开列与已有安全标签的关联,然后在列上附加新的安全标签。一个表可以有任意数量的受保护的列。
可以像下面这样创建受列级保护的表:
清单 7. 创建受列级保护的表
CREATE TABLE employee
(id int, name char (25), ssn char(15) COLUMN SECURED WITH manager)
SECURITY POLICY MegaCorp;
ALTER TABLE department MODIFY
(budget decimal(15,2) COLUMN SECURED WITH director),
ADD SECURITY POLICY MegaCorp;
内置安全标签函数
IDS 提供了 3 个用于处理安全标签的内置 SQL 函数:
SECLABEL_BY_COMP:该函数通过指定一个安全策略,并在标签中为每个组件指定值,从而构建一个安全标签(内部编码表示)。返回值有一个 IDSSECURITYLABEL 数据类型。该函数在插入和更新操作中为一个数据行提供行安全标签。
清单 8. SECLABEL_BY_COMP 函数
INSERT INTO employee VALUES
(SECLABEL_BY_COMP('megacorp', 'Secret:
(Product Development,Quality Assurance):Europe', 1,
'Manoj', '123-45-6789');
UPDATE employee SET lbl = SECLABEL_BY_COMP
('megacorp', 'Public:Marketing:Americas') WHERE id = 2;
SECLABEL_BY_NAME:该函数通过指定一个安全策略和这个安全策略中一个安全标签的名称,构建一个安全标签(内部编码表示)。返回值是一个 IDSSECURITYLABEL 数据类型。该函数在插入和更新操作中为一个数据行提供行安全标签。
清单 9. SECLABEL_BY_NAME function
INSERT INTO employee VALUES
(SECLABEL_BY_NAME('megacorp', 'manager', 3, 'Lynette', '987-65-4321' );
UPDATE employee SET lbl = SECLABEL_BY_NAME
('megacorp', 'director') WHERE id = 4;
SECLABEL_TO_CHAR:该函数返回组成一个安全标签的值的一个字符串表示。该函数在选择操作中检索行安全标签列。可以将它看作 SECLABEL_BY_COMP 的逆操作。
表 2. SELECT SECLABEL_TO_CHAR('megacorp', lbl), id FROM employee; examples
LABEL | id |
'Secret:(Product Development,Quality Assurance):Europe' | 1 |
'Public:Marketing:Americas' | 2 |
'Confidential:Finance:UK' | 3 |
'Secret:(Product Development,Quality Assurance):USA' | 4 |
结束语
在本文中,您探索了如何使用 IDS LBAC 特性来部署经过精确调优的策略控制。基于标签的访问控制实现了对数据访问的细粒度控制。您可以轻松地部署 LBAC 基础设施,并对它进行精确的调优,以满足严格的安全环境需求,比如政府和国防。
- ››基于IP地址的vsftp服务器
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››基于Windows Azure的云计算应用设计
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
- ››基于SolidWarks齿轮机构的运动分析与仿真
- ››基于Windwos Server 2008故障转移群
- ››基于JavaScript的REST客户端框架
- ››基于JavaScript和CSS的Web图表框架横向对比
更多精彩
赞助商链接