简介
身份失窃和数据泄露是美国增长最快的犯罪类型之一。罪犯窃取个人数据进行欺诈和获取钱财,比如社会保险号和信用卡号。罪犯通过计算机网络、电子邮件、邮件、废纸篓和很多其他地方获得这种数据。虽然公司尽最大努力阻止入侵者入侵网络和敏感数据,但是超过 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 可以像下面这样创建豁免权: