DB2 10.5 for Linux, UNIX, and Windows

基于标签的访问控制 (LBAC) 概述

基于标签的访问控制 (LBAC) 大大增强了您对哪些用户能够访问数据的控制。LBAC 使您能够准确地确定对于各行各列具有写访问权的用户和具有读访问权的用户。

LBAC 的功能

LBAC 功能的配置简单方便,可以针对特定的安全环境对其进行定制。所有 LBAC 配置工作都由安全性管理员(这是被授予 SECADM 权限的用户)执行。

安全性管理员通过创建安全标号组件来配置 LBAC 系统。安全标号组件是一种数据库对象,表示用于确定用户是否应该访问数据块的条件。例如,条件可以是用户是否在特定部门中或他们是否在完成特定项目。安全策略描述的是用来确定哪些用户能够访问哪些数据的条件。安全策略包含一个或多个安全标号组件。对于任何一个表,只能使用一个安全策略来保护它,但不同的表可以由不同的安全策略保护。

创建安全策略之后,安全性管理员将创建称为安全标号的对象,这些对象是安全策略的组成部分。安全标号包含安全标号组件。安全标号的具体内容由安全策略确定,可以将其配置成表示贵单位在确定哪些用户能访问特定数据项时所依据的条件。例如,如果您决定查看公司中某人的职务及其担任的项目,以便确定他们应该看到的数据,那么可以配置安全标号以使每个标号都可以包含该信息。LBAC 相当灵活,它使您能够设置非常复杂的条件,也能够建立非常简单的系统(每个标号都表示“高”或“低”信任级别)。

一旦创建安全标号,就可以使其与各个表列和表行相关联以保护存放在那些位置中的数据。受安全标号保护的数据称为受保护数据。安全性管理员通过将安全标号授予用户来允许该用户访问受保护数据。当用户尝试访问受保护数据时,该用户的安全标号将与用于保护该数据的安全标号进行比较。用于进行保护的标号将阻塞一部分安全标号。

允许一个用户、角色或组同时拥有多个安全策略的安全标号。但是,对于任何给定的安全策略,一个用户、角色或组最多可以拥有一个读访问权标号和一个写访问权标号。

安全性管理员还可以将免除权赋予用户。免除权允许用户访问安全标号可能不允许访问的受保护数据。安全标号和免除权统称为 LBAC 凭证

如果尝试访问 LBAC 凭证不允许访问的受保护列,访问就会失败,并且会发出错误消息。

如果尝试读取 LBAC 凭证不允许读取的受保护行,那么 DB2® 会将那些行视为不存在。在运行的任何 SQL 语句(包括 SELECT、UPDATE 或 DELETE)中都不能选择那些行。即使是聚集函数也会忽略 LBAC 凭证不允许读取的行。例如,COUNT(*) 函数将只返回您有权读取的行数。

视图和 LBAC

可以像对未受保护表定义视图那样对受保护表定义视图。当访问这样的视图时,将强制实施对基础表的 LBAC 保护。使用的 LBAC 凭证就是会话授权标识的那些 LBAC 凭证。访问同一视图的两个用户可能会看到不同的行,这取决于他们的 LBAC 凭证。

引用完整性约束和 LBAC

下列规则说明了存在引用完整性约束时如何强制实施 LBAC 规则:
  • 规则 1:不对内部生成的子表扫描应用 LBAC 读访问规则。这是为了避免出现孤立的子代。
  • 规则 2:不对内部生成的父表扫描应用 LBAC 读访问规则。
  • 规则 3:当对子表执行 CASCADE 操作时,应用 LBAC 写规则。例如,如果用户删除了父表,但由于违反 LBAC 写规则而无法删除任何子表,那么应该会回滚删除操作并发出错误。

使用 LBAC 时的存储器开销

使用 LBAC 在行级别来保护一个表时,增加的存储器成本就是行安全标号列所需的成本。此成本取决于所选择的安全标号的类型。例如,如果您创建具有两个组件的安全策略来保护表,那么该安全策略使用的安全标号将占用 16 个字节(每个组件占用 8 个字节)。因为行安全标号列被当作不可空的 VARCHAR 列来处理,所以这种情况下的总成本将为每行占用 20 个字节。通常,每行的总成本为 (N*8 + 4) 个字节,其中 N 是组成用于保护表的安全策略的组件数。

使用 LBAC 在列级别来保护一个表时,列安全标号是元数据(即,它与该列的元数据一起存储在 SYSCOLUMNS 目录表中)。此元数据就是用于保护该列的安全标号的标识。在此情况下,用户表不会产生任何存储器开销。

LBAC 的不足之处

  • LBAC 永远不允许访问被自主访问控制禁止访问的数据。
    示例: 如果您无权读取某个表,那么不会允许您读取该表的数据 - 即使是 LBAC 允许您访问的行和列亦如此。
  • LBAC 凭证仅限制对受保护数据的访问。它们不影响对未受保护数据的访问。
  • 删除表或数据库时,不会检查 LBAC 凭证,即使该表或数据库包含受保护数据亦如此。
  • 备份数据时,不会检查 LBAC 凭证。如果您可以对某个表运行备份,那么应用于数据的 LBAC 保护功能不会以任何方式限制对各个表行的备份。并且,备份介质上的数据也不受 LBAC 保护。只有数据库中的数据才受保护。
  • 不能使用 LBAC 来保护下列任何类型的表:
    • 登台表
    • 登台表依赖的表
    • 类型表
  • 不能对昵称应用 LBAC 保护功能。

LBAC 教程

http://www.ibm.com/developerworks/data 上在线提供的教程为您导览了 LBAC 的基本用法,该教程称为 DB2 Label-Based Access Control, a practical guide