第 2 部分 Informix IDS 11.5 安全性

 

数据库安全

在当今,数据库安全是极其重要的。您的数据库可能允许客户通过 Internet 购买产品,或者包含用于预测商业走势的历史数据;不管哪种情况,您的公司都需要一个健全的数据库安全计划。数据库安全计划应该确定:

  • 谁可以访问数据库服务器实例和数据库
  • 从哪里以什么方式验证用户密码
  • 用户的授权级别
  • 用户能够运行的命令
  • 用户能够读取或修改的数据
  • 用户能够创建、修改或删除的数据库对象

IDS 安全性机制

IDS 为实现数据库安全计划提供 3 个主要的机制:身份验证、授权和特权。

  • 身份验证:是指 IDS 验证用户的身份的过程。IDS 身份验证在验证用户 ID 和密码时与底层操作系统的安全特性密切合作。IDS 还可以在验证用户身份方面与安全协议合作,比如 PAM 和 Kerberos。
  • 授权:涉及到确定用户或组能够执行的操作,或能够访问的数据对象。用户执行高级数据库和实例管理操作的能力取决于授予他们的权限。
  • 特权:比授权的粒度更细,可以授予用户或组。特权帮助定义用户能够创建和删除的对象。特权还可以定义用户能够用于访问对象(比如表、视图、索引和包)的命令。IDS 支持基于标签的访问控制 (LBAC),它提供更细粒度的控制,甚至可以控制谁有权限访问某个行或列。

IDS 还为更高级别的安全性提供加密。

IDS 中的身份验证机制

身份验证是确认用户或应用程序的身份的机制。数据库服务器仅允许身份得到确认的用户访问数据,如 图 1 所示。IDS 采用客户机-服务器架构,其中客户机可以是远程用户或本地用户。


图 1. 身份验证流程

本地连接是指客户机和位于相同机器上的服务器之间的连接。远程连接是指客户机和位于不同机器上的服务器之间的连接。IDS 支持传统的身份验证机制,即用户需要提供用户 ID 和密码才能连接到数据库。IDS 还支持其他身份验证机制,比如插入式验证模块(Pluggable Authentication Module,PAM)。

传统身份验证

IDS 服务器在连接方面遵循 UNIX 安全性需求。在传统的身份验证中,IDS 通过操作系统 API 验证用户的 UNIX 或 Windows® 登录 ID 和密码。


插入式身份验证模块

插入式身份验证模块 (PAM) 是一个框架,它允许用户开发和实现定制的身份验证机制,同时不对应用程序进行任何修改。IDS 支持的模式包含密码模式和询问响应模式。在密码模式下,用户仅凭密码就能够通过身份验证。在询问响应模式下,服务器将提出一个问题,而客户机需要发送一个响应。仅当客户机发送正确的响应时,它才能够访问数据库。


回页首

配置 IDS 以使用 PAM

下面是将 IDS 配置为使用 PAM 模块的基础步骤(有些细节是特定于平台的,但是概念是通用的):

  1. 定义 PAM 模块:标识或创建需要使用的 PAM 模块。例如,您可以使用 pam_unix/pam_aix/pam_unix_auth,它进行传统的基于网络文件的身份验证。这个共享对象通常位于独立于平台的路径(比如 Solaris 上的 /usr/lib/security/pam_unix.so)。如果您亲自创建模块,则要把它复制到正确的位置。
  2. 配置 PAM 模块:在 $INFORMIXDIR/etc/sqlhosts 文件添加选项字段,表明将使用 PAM 身份验证。清单 1 显示如何配置密码类型的模块:

    清单 1. PAM 的 sqlhosts 条目

                                                    

#Server-name service  machinename portno Options

demo_on      ontlitcp demohost    1111   s=4,pam_serv=(login),pamauth=(password)

 

Where login is name of the PAM module set the PAM configuration file

 

sqlhosts entry for a challenge-type module

 

#Server-name service  machinename portno Options

demo_on      ontlitcp demohost    1111   s=4,pam_serv=(xxx),pamauth=(challenge)

 

Note: Here xxx is a challenge-oriented module which will have the required entry

      in the PAM configuration file.

 


 

单点登录 (SSO)

单点登录是一个身份验证特性,只要用户登录客户机的操作系统之后就不再需要提供用户名和密码。IDS 使用 Kerberos 5 安全协议实现了对单点登录(SSO)的支持。

使用 SSO 时,DBMS 和其他支持 SSO 的服务在用户首次登录到客户机系统(或 Windows 中的域)时进行身份验证。Kerberos 实现验证用户凭证。Kerberos 身份验证生成一组用于储存登录凭证的密匙。当用户操作试图访问 Dynamic Server 数据库时,票据授予票据(ticket-granting ticket,TKT)交换允许不提示登录访问数据库。

SSO 还支持机密性和完整性服务,因此 SSO 环境不需要具有其他 Dynamic Server CSM。启用机密性之后,对于通过 SSO 验证的用户,向其传入或其输出的数据都经过加密,并且仅使用授权凭证登录的用户能够查看这些数据。完整性服务确保在用户和 DBMS 之间发送的数据没有在传输过程中被篡改。

将 IDS 配置为使用 SSO 需要大量特定于平台的设置。不过,对于基础考试,您仅需理解如何设置 sqlhosts 文件和 concsm.cfg 文件以使用 SSO。这在 “Encryption Support in IDS” 的 Generic Security Services Communications Support Module (GSSCSM) 主题下讨论。

IDS 中的访问控制

可以通过多种方法使用 SQL 语句保护对数据的访问。首先,本教程描述数据库服务器中用于控制访问 SQL 对象的各种访问控制机制。接着描述列级别的加密特性,该特性用于加密表中指定的列上的数据。

IDS 中包含的访问控制机制大体分为两类,即自主访问控制(DAC)和基于标签的访问控制(LBAC)。在数据库服务器中使用特权和角色来实施 DAC。LBAC 的实施是使用安全标签来实现的。

数据库管理员(DBA)在保护敏感数据免受非授权用户访问方面起到关键作用。SQL 提供在不同粒度级别上实现数据保护的方法。注意,DBA 与数据库系统管理员(DBSA)是不同的。DBSA 的角色是维护服务器,而 DBA 的角色是创建和维护数据库。

自主访问控制

自主访问控制(Discretionary access control,DAC)是主要的访问控制机制,它支持使用特权和角色访问 SQL 对象。在数据库服务器中,使用 DAC 保护的对象包括数据库、表、列、视图、类型、例程和语言。DAC 不能用于行级别的保护;因此,保护行要使用 LBAC。通过保护这些对象以及给授权用户授予访问这些对象的特权可以实现高效的访问控制。没有所需权限的用户不能执行访问这些对象的查询。

在典型的 IDS 安装中,有大量的用户访问系统、执行查询和修改数据。为所有用户创建必要的特权会使管理员角色的工作过于琐碎繁杂。另外,公司的策略可能为用户规定不同的特权,这取决于他们执行的工作。这让管理员的责任更加重大,因为必须根据最新的特权策略授予或撤销特权。服务器中的角色功能减轻了管理员的压力。基于角色的访问控制(RBAC)将特权合并到角色中然后再将角色分配给用户,从而扩展了基于特权的访问。


 

受保护的 SQL 对象

DBMS 中的以下对象需要用户具有特定的授权或特权才能访问:

  • 数据库
  • 表中的列
  • 片段
  • 视图
  • 用户定义类型 (UDT)
  • 例程
  • 语言

用户提交的大部分 SQL 查询都与一个或多个这些对象进行交互。在这些对象上为用户授予的特权确定用户能够执行所需的操作。图 2 显示了在 SQL 查询执行路径上进行的特权检查。首先,检查数据库特权。然后检查与用户查询相关联的 SQL 对象上的特权。用户特权基于显式地授予用户的特权、用户当前角色具有的特权和公共特权。


图 2. SQL 查询中的特权检查

表 1 总结了特定 SQL 对象可用的特权:


表 1. SQL 对象及其特权

SQL 对象

特权

Database

Connect, resource, DBA

Table

Select, update, insert, delete, index, alter, references

Column

Select, update, references

Fragment

Insert, update, delete

View

Select, insert, delete, update

Sequence

Select, alter

UDT

Usage, under

Routine

Execute

Language

Usage

每个 SQL 对象都与某个特权相关联,并且每个特权都与一组功能相关联。当用户被授予某个特权时,他就有权限执行该 SQL 对象上的功能。IDS 提供 GRANT 和 REVOKE 语句来授予或删除特权。

GRANT 和 REVOKE 语句

SQL 提供 GRANT 和 REVOKE 语句来向用户授予特权或回收特权。清单 2 显示了数据库对象上的 GRANT 和 REVOKE 语句的语法。这个例子中的特权表示 CONNECT、RESOURCE 或 DBA 特权之一。“user-list” 表示用户列表,包括 PUBLIC。


清单 2. 语法:GRANT/REVOKE 语句

                                     

GRANT privilege TO user-list

REVOKE privilege FROM user-list

           

 

向一个用户或用户列表授予特权。PUBLIC 是用于表示数据库系统中的所有用户的关键字。当特权授予 PUBLIC 时,则表示系统的所有用户都拥有该特权。类似地,当从 PUBLIC 回收特权时,系统中的所有用户都被剥夺授予给 PUBLIC 的特权。不过,他们还拥有单独授予的特权,或通过角色授予的特权。授予用户的特权只有在回收该特权时才失效。仅特权授予者和 DBA 能够撤销特权。表 2 列出了可以授予用户的数据库特权:


表 2. 数据库特权

数据库特权

说明

DBA

数据库创建者/所有者。能够授予数据库中的其他对象上的特权。

Resource

能够连接到数据库并创建其他对象。

Connect

能够连接到数据库执行查询。

DBA 特权授予创建数据库的用户,但也可以在数据库创建之后授予其他用户。DBA 特权是 3 个数据库级别的特权中最高级的特权。(因此,本教程将具有 DBA 特权的用户称为 DBA)。DBA 能够执行数据库中的所有操作。DBA 还能够将 DBA、RESOURCE 和 CONNECT 特权授予数据库的其他用户。因此,一个数据库可以有多个 DBA。通常情况下,数据库中的对象创建者就是该对象的所有者。DBA 还可以在数据库中创建由其他用户拥有的对象。DBA 能够执行的任务包括:

  • 向其他用户授予数据库级别的特权,或回收这些特权
  • 在数据库的其他对象上授予特权,比如表、视图、序列、UDT、例程和语言等
  • 在数据库中创建由其他用户拥有的表、视图和索引
  • 修改和删除数据库中的对象,而不管其所有者是谁
  • 运行 DROP DATABASE 语句
  • 执行 RESOURCE 有权限执行的所有操作

在数据库中,RESOURCE 特权仅低于 DBA 特权。DBA 向其他用户授予 RESOURCE 特权,让他们能够在数据库中创建其他 SQL 对象。RESOURCE 特权用户能够执行的任务包括:

  • 创建永久的表、索引和 SPL 例程
  • 需要使用磁盘空间的任务
  • 执行 CONNECT 特权用户有权限执行的所有操作

DBA 向用户授予 CONNECT 特权,让他们能够连接到数据库并执行查询。CONNECT 是数据库级别的最低级特权,因为拥有该特权的用户不能在数据库中创建其他对象。以下是 CONNECT 用户能够执行的任务:

  • 连接到数据库
  • 在拥有必要的表级别特权的数据库表上运行查询和 DML 语句
  • 执行 SPL 例程,前提是拥有必要的表级别特权
  • 创建视图,前提是有权限在视图所在的表上执行查询
  • 创建临时表和在临时表上创建索引


表 3. 表特权

表特权

说明

Select

允许用户从表读取数据。他们能够在表上执行 SELECT 查询或创建视图。

Update

允许用户更新表中的数据。

Insert

允许用户在表中插入行。

Delete

允许用户从表中删除行。

Index

允许用户在表上创建索引。

Alter

允许用户修改表。

References

允许用户在表上创建引用约束。

Under

允许用户在表下创建子表。

列特权

授予表级别特权之后,就隐式地对表中的所有列授予了列特权。列级别特权帮助进一步将用户的操作限定到特定的列上。在列级别上可用的特权仅包括 SELECT、UPDATE 和 REFERENCES。

片段特权

您可以使用 GRANT FRAGMENT 语句在表的单个片段上授予 INSERT、UPDATE 和 DELETE 特权。片段特权仅适用于用表达式创建的片段。授予表中的片段的片段级别特权在以下情况下不存在:

  • 如果表的片段策略从基于表达式更改为其他策略,比如循环(round-robin)
  • 如果从表中删除某个片段,这将导致删除该片段上的特权
  • 如果片段基于的表达式被更改,那么片段特权就会被删除,用户只能采用默认的表特权

表 4 列出了可以授予用户的类型特权:


表 4. 类型特权

类型特权

说明

Usage

授权使用已命名的数据类型。

Under

授权在类型层级中将已命名的数据类型用作超类型。

视图特权

在一个视图(VIEW)创建之后,IDS 将在给视图的创建者或所有者授予特权之前检查底层表的特权。如果用户在底层表上拥有 SELECT 特权,那么将创建视图,并向用户授予视图的 SELECT 特权。如果用户在底层表上不具有 SELECT 特权,那么将不创建视图。如果用户在底层表上还拥有 INSERT、UPDATE 和 DELETE 特权,那么将向用户授予视图的这些权限。您使用视图时,将对该视图使用特权,而不是底层表。视图的创建者通常将视图的特权授予其他用户。

序列特权

序列特权(SEQUENCE)类似于表级别的特权。不同之处是在序列上仅授予 SELECT 和 ALTER 特权。具有 SELECT 特权的用户能够在查询中使用序列。具有 ALTER 特权的用户能够使用 ALTER SEQUENCE 或 RENAME SEQUENCE 语句修改序列。序列仅能由具有 DBA 特权的用户创建。可以向用户或角色授予序列上的 ALTER 和 SELECT 特权。

例程特权

创建例程所需的特权与使用例程所需的特权不同。创建例程或过程需要以下特权:

  • 数据库级别的 DB2 特权或 RESOURCE 特权
  • 语言级别特权,决定编写例程使用的语言
  • EXTEND 角色特权,如果 IFX_EXTEND_ROLE 配置参数设置为 1 并且例程使用 Java™ 技术或 C UDR 的话

默认情况下,例程的创建者拥有执行该例程的特权。如果另一个用户需要执行这个例程,那么例程的创建者必须向该用户授予 EXECUTE 特权。

语言特权

在 IDS 中,用户定义例程(UDR)是用 SPL 或其他外部语言(比如 C 和 Java)编写的。要用特定语言创建例程,用户需要使用该语言的 USAGE 特权。默认情况下,SPL 的语言使用特权对用户 informix 和持有数据库 DBA 特权的用户可用。不过,informix 用户可以向其他用户授予该语言使用特权。具有 DBA 特权的用户不能向其他用户授予该特权。默认情况下,创建 SPL 例程的 USAGE 特权授予 PUBLIC。

角色

基于角色的访问控制(RBAC)将特权合并到角色中然后再将角色分配给用户,从而扩展了基于特权的访问。角色可以定义为工作任务的类别。例如,您可以在公司中定义经理角色。经理角色有一组职责,比如雇用职员、审查绩效、工薪谈判和批准奖金等等。一般情况下,经理都要在所有部门中完成这些职责。为了完成这些任务,经理需要某些特权,比如访问员工记录或其他仅经理可以访问的数据。当员工晋升为经理或招聘了新的经理时,他们将担任经理角色并获得与该角色相关的特权。IDS 在 DBMS 提供的角色与这里的角色属于同一概念。

预定义角色

从安全性角度看,为了最大限度地限制滥用数据库内容,在公司中有必要将管理职责分配给不同的职员。为了支持职责分离,IDS 具有以下预定义角色:

  • 数据库服务器管理员(DBSA)
    • 用户帐户,负责配置、调优、和维护基于本地 IDS 数据库服务器的服务器实例
    • 职责包括启动和关闭数据库服务器、磁盘空间管理、备份恢复、性能调优和故障诊断
  • 数据库系统安全维护员(DBSSO)
    • 为在本地数据库服务器实例上工作的特定用户定义审计掩码
  • 审计分析员(AAO)
    • 负责审计配置和审计跟踪分析
  • 数据库管理员(DBA)
    • 在本地数据库服务器中维护特定的数据库
    • 自动地将权限授予数据库创建者或由数据库创建授予权限
    • 不一定要包含数据库服务器特权
  • 操作系统管理员(OSA)
    • 定义和维护本地用户帐户,包括 AAO、DBSA 和 DBSSO 组
    • 安装 IDS 产品;负责为角色分离更改所需的组权限
    • 维护内核参数设置和资源限制,比如文件和内存
  • 用户
    • 用于运行基于数据库的应用程序的本地或远程用户帐户
  • 特权用户
    • IDS 将 informix 和根用户定义为特权用户

您可以在数据库中根据自己的需求创建定制的角色。角色仅能由 DBA 特权用户创建。特权由 DBA 授予角色,而角色被分配给用户。用户可以根据需要执行的任务担任角色,并且在任务完成之后脱离角色。可以给一个用户授予多个角色,但一个用户一次仅能担任一个角色。因此,取决于需要执行的操作,用户将担任一个角色并获取该角色拥有的特权。

以下的小节描述创建角色、授予和设置角色、默认角色、撤销用户的角色、撤销角色的特权和删除角色等的语法和语义。

创建角色

角色仅适用于创建它的数据库中。清单 3 提供了 CREATE ROLE 语句的语法,其中 role_name 是角色的名称:


清单 3. 语法:CREATE ROLE

                                     

CREATE ROLE role_name;

           

 

授予角色特权

为角色授予特权的语法与为用户授予特权的语法相同。在指定用户名的位置将用户名替换为角色名。仅 DBA 能够给角色授予特权。


清单 4. 语法:给角色授予特权

                                     

GRANT priv_list ON table To role_list;

           

 

授予/撤销用户的角色

给用户授予角色类似于给用户授予特权。主要区别是授予特权是在 SQL 对象上授予的,比如表、列、视图、例程、语言或片段,而授予角色时不与 SQL 对象相关联。角色存在数据库内部,用户担任拥有一组特权的角色。这些特权可以在任何 SQL 对象上,如前面小节所述。撤销角色的语句也与撤销特权的语句相似。


清单 5. 语法:授予/撤销用户角色

                                     

GRANT role_name TO user_list;

REVOKE role_name FROM user_list;

           

 

拥有 DBA 特权的用户将角色授予其他用户。CREATE ROLE 和 GRANT 角色语句不能激活角色。角色由 SET ROLE 语句激活。

默认角色

管理员可以定义一个默认的角色,并将其授予其他用户或在特定数据库中授予 PUBLIC。默认的角色在用户建立与数据库的连接时会自动应用。清单 6 提供 GRANT DEFAULT ROLE 语句的语法。可以将默认角色授予一组用户。


清单 6. 语法:授予默认角色

                                     

GRANT DEFAULT ROLE role_name TO user_list;

           

 

担任角色

将非默认角色授予用户之后,用户必须使用 SET ROLE 语句启用该角色。在建立到数据库的连接时,用户就担任了默认的角色。如果没有给用户授予默认角色,那么建立连接之后用户在数据库中不担任任何角色。通过使用 SET ROLE 语句,用户可以更改当前角色或切换到新的角色。 清单 7 提供 SET ROLE 语句的语法。角色可以设置为 role_name。此外,还可以将角色设置为 NULL 值或 NONE,在这种情况下禁用了当前的角色。当将角色设置为 DEFAULT 时,将启用默认的角色。


清单 7. 语法:设置角色

                                     

SET ROLE role_name;

SET ROLE NULL;

SET ROLE NONE;

SET ROLE DEFAULT;

           

 

当用户担任一个新角色时,除了用户已有的特权和公共特权之外,他还将得到该角色的所有特权。如果将一个角色授予已经担任一个角色的用户,那么除了用户已有的特权和公共特权之外,该用户还将拥有这两个角色的所有特权。可以给同一用户授予多个角色,但用户最多只能担任一个非默认角色,这是 SET ROLE 语句指定的。如果 SET ROLE 语句重复了,那么新的角色将作为当前角色代替旧角色。

删除角色

仅有 DBA 或使用 WITH GRANT OPTION 向其授予角色的用户能够删除角色。一旦删除角色之后,任何用户都不能授予或启用被删除的角色。此外,担任被删除角色的用户将失去该角色的所有特权,除非用户本身被授予相同的特权,或相同的特权授予 PUBLIC。如果删除的角色是默认的角色,那么用户的默认角色将变成 NULL。清单 8 提供 DROP ROLE 语句的语法。角色的名称由 role_name 表明。


清单 8. 语法:删除角色

                                     

DROP ROLE role_name;

           

 


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

自主访问控制是在数据库对象级别上工作的,比如数据库、表、列和视图等,而基于标签的访问控制是在数据的行和列级别上工作的。表由安全策略保护,单个的行和列则由安全标签保护。数据库安全管理员(DBSECADM)创建安全策略和标签,并将标签授予用户。当具有安全标签的用户向由等效安全策略保护的表写入数据行时,将在该表的每个行生成数据标签。LBAC 工作的基本原理是,在保护行的数据标签中,其安全标签占据优势的用户能够读取数据。如何计算优势?任何标签都由每个组件中的个体组件和元素组成。如果用户标签中的个体组件超过特定安全策略的行标签的个体组件,那么用户标签就占优势。通过样例场景能够更好的展示这些概念。

样例 LBAC 场景

考虑一个具有传统组织结构的公司 LBL Corp.。图 3 显示了该公司的部分组织结构。该图显示由各自的 VP 领导的所有公司部门:

  • Marketing (VP)
  • Sales (VP)
    • West-region (Director)
    • East-region (Director)
    • South-region (Director)
    • North-region (Director)
  • Engineering (VP)
  • Finance (VP)
  • HR (VP)


图 3. LBL Corp. 的部门

以下场景描述 LBL Corp. 公司的 3 个业务需求,然后描述如何使用 LBAC 实现这些业务需求。

场景 1:部门层级结构

销售部门进一步划分为由各个区域主管领导的区域。这个层次结构进一步划分为更小的区域,最后一级是个体销售人员。图 4 显示了扩展后的销售组织:

  • Sales (VP
    • West-region (Director)
    • East-region (Director)
      • Georgia (Manager)
        • Atlanta (Sales rep 1; Sales rep 2)
      • Florida (Manager)
    • South-region (Director)
      • Texas
        • Dallas (Sales rep 1; Sales rep 2)
        • Houston (Sales rep 1; Sales rep 2)
    • North-region (Director)


图 4. LBL Corp. 的销售部门

存储销售数据的首要要求是,员工能够看到属于自己或自己管辖的下属组织的数据,同时他们又不能看到属于其他同事的数据。例如,销售副总裁能够看到属于所有区域的数据,而每个区域的主管仅能看到属于他们的区域的数据。在该层级结构的最末端,个体销售人员仅能看到自己的数据。

这可以通过以下途径实现,将标签授予组织中的用户,并且让位于层次结构的更高层的人员比位于更底层的人员占有更多标签。这样,授予销售 VP 的标签多于授予任何区域主管的标签,授予区域主管的标签多于授予任何子区域经理的标签,而授予子区域经理的标签多于授予个体销售人员的标签。这种关系最好通过为销售部门定义一个 TREE 组件来实现。本教程继续将该场景作为例子讨论,并且为销售数据表定义安全策略和标签。

场景 2:文档分类

另一个能够将 LBAC 派上用场的场景是:根据文档的敏感级别将其分类,拥有某个敏感级别的用户能够读取敏感级别更低的文档。回过头来看看 图 3,销售文档可以根据敏感级别进行分类,比如 Top Secret、Secret、Confidential 和 Unclassified。公司的 CEO 被授予组件元素为 Top Secret 的标签。技术架构师甚至应该被授予更高的敏感级别,以让他们能够访问核心竞争信息。这种关系最好通过定义一个敏感级别 ARRAY 组件来实现。本教程继续将该场景作为例子讨论,并且描述创建安全组件的例子。

场景 3:特殊用户

现在我们进入第 3 个场景,它描述了 SET 组件类型的使用。回顾 图 3 的 HR 部门。每个部门的 VP 能够看到自己部门的员工的记录,但不能看到其他部门的员工的记录。不过人力资源 VP 应该能够看到公司的所有员工的记录。因此,HR VP 的标签包含所有部门。其他 VP 的标签仅将各自的部门作为 SET 组件的一部分。本教程在后面的小节中通过例子对此进行演示。

样例场景展示了 LBAC 能够以多种方式提供创建安全策略的框架,并使用这些策略保护数据。受 LBAC 保护的表的主要特征是,通过细化数据访问粒度来实现安全性和隐私性。支持 LBAC 实施的 SQL 对象是安全标签组件、安全策略和安全标签。这些对象用于保护表中的各个行和列。LBAC 的实施级别低于 DAC 的实施级别。在数据库级别和表级别检查了特权之后,将在获取数据的行和列级别实施 LBAC。仅有 DBSECADM 能够创建 LBAC SQL 对象或将它们应用到表或授予用户。DBSECADM 是 IDS 提供的内置角色,并且由数据库系统管理员将该角色授予个体用户。所有 LBAC SQL 对象都存在数据库上下文中。创建 LBAC 框架有 3 个重要步骤:

  • 定义安全策略
  • 创建安全标签
  • 将安全标签分配给用户

IDS 中的加密支持

加密技术是作为插入式通信支持模块(pluggable communication supports module,CSM)与 IDS 集成的。表 5 给出了 IDS 提供的 CSM 列表:


表 5. IDS 中的 CSM

CSM 名称

操作系统

库位置和名称

说明

ENCCSM

UNIX

$INFORMIXDIR/lib/csm/iencs11a.so

这个模块用于加密在客户机和服务器之间传输的所有数据

 

WINDOWS

%INFORMIXDIR%\lib\csm\iencs11a.dll

 

SPWDCSM

UNIX

$INFORMIXDIR/lib/csm/ispws11a.so

这个模块仅用于加密从客户机发送到服务器的密码

 

WINDOWS

%INFORMIXDIR%\lib\csm\ispws11a.dll

 

GSSCSM

UNIX

$INFORMIXDIR/lib/csm/igsss11a.so

这个模块用于在 IDS 中指出单点登录身份验证

 

WINDOWS

%INFORMIXDIR%\lib\csm\igsss11a.dll

 


 

配置 IDS 以使用加密

这个配置过程包含 2 个步骤:

步骤 1:在 CSM 配置文件 (concsm.cfg) 中配置 CSM

这个文件位于 $INFORMIXDIR/etc,您也可以使用 INFORMIXCONCSMCFG 环境变量。

  • 定义加密 CSM。清单 9 显示了 concsm.cfg\ 中的 ENCCSM 条目的语法:


清单 9. ENCCSM 语法

                                     

ENCCSM ("path","cipher[options],mac[ options], switch[ options]", "")

Where the options are:

               Path   - The absolute path of the CSM shared library

               Cipher - Specifies the names of the ciphers that you want to use

                          for encryption

               Mac    - Specifies the absolute path of the MAC key file

               Switch - Specifies the time interval for switching between ciphers if

                        multiple ciphers are defined

 

For example,

ENCCSM("/usr/informix/lib/csm/iencs11a.so","cipher[des:ecb,ede:ecb],

       mac[levels:<medium>,files:</usr/informix/etc/mackey.dat>],

       switch[cipher:2,key:1]","")

 

  • 定义简单密码 CSM。清单 10 显示了 concsm.cfg 中的 SPWDCSM 的语法:


清单 10. SPWDCSM 语法

                                     

SPWDCSM("path","global option","conn_options")

Where the options are:

        Path          - Absolute path of the CSM shared library

        Global option - Not supported currently, must be null

        conn_options  - p=0 password not mandatory

                           p=1 password mandatory for authentication

 

The following example shows how the entry for SPWDCSM in the concsm.cfg file should

look. Here ispws11a.so is a CSM library and p=1 mandates that the password verification

is needed.

 

SPWDCSM("/usr/informix/lib/csm/ispws11a.so","","p=1")

 

  • 定义 GSSCSM。清单 11 显示了 concsm.cfg 中的 GSSCSM 条目的语法:


清单 11. GSSCSM 语法

                                     

GSSCSM("path", "global options", "conn_options")

Where the options are:

        Path          - Absolute path of the CSM shared library

        Global option - Not supported currently, must be null

        Conn_options  - You can configure Kerberos-defined confidentiality and

                      integrity services leave it blank to accept the defaults.

                           You can enter any values, you can do this for

                      one service or for both services. The settings must be

                      entered as comma-separated values. The conn_options in

                      the concsm.cfg file are as follows:

                                  

                           Settings Result

                           c=0      Confidentiality service of the Generic Security

                               Services (GSS)API is disabled.

                           c=1      Confidentiality service is enabled. This is the

                               default setting.

                           i=0      Integrity service of the GSS-API is disabled.

                           i=1      Integrity service is enabled. This is the default

                               setting.

 

The following example shows how the entry for SPWDCSM in the concsm.cfg file should

look.  Here ispws11a.so is a CSM library and p=1 mandating the password verification

is needed.

 

GSSCSM("/usr/informix/lib/csm/igsss11a.so","","")

 

步骤 2:将 CSM 与 IDS 实例关联起来

设置了 concsm.cfg 之后,您可以通过更新 sqlhosts 文件将 CSM 与 IDS 关联起来。


清单 12. ENCCSM/SPWDCSM/GSSCSM 的 sqlhosts 条目

                                     

demo_on1 onsoctcp demohost 1111 csm=(ENCCSM)

demo_on2 onsoctcp demohost 1112 csm=(SPWDCSM)

demo_on3 onsoctcp demohost 1113 s=7,csm=(GSSCSM)    

           

 

除了通过连接进行加密以外,IDS 还支持列级加密(CLE),这是一个基于 SQL 的实现。


 

IDS 中的安全套接字层(SSL)

安全套接字层(SSL)协议是一个通信协议,它通过网络两个点之间的可靠的端到端安全连接使用加密为数据通信提供隐私性和完整性。

配置 IDS 实例以使用 SSL

为了将 IDS 实例配置为使用 SSL 连接,您需要向 sqlhosts 文件添加连接信息、设置 SSL 配置参数,以及配置密钥仓库和它储存的数字证书。密钥仓库和数字证书超出了考试范围;您仅需知道如何设置 sqlhosts 文件以使用 SSL。

  • 在 sqlhosts 文件(UNIX)或 SQLHOSTS 注册表(Windows)中更新连接性息,以包含关于 SSL 连接的信息。使用正确的协议:
    • 对所有 Informix 客户机使用 onsocssl 协议,比如 ESQL/C、ODBC、DB-Access、dbexport 实用工具、dbimport 实用工具、dbschema 实用工具或 dbload 实用工具连接
    • 对 DRDA 连接使用 drsocssl 协议

清单 13 显示了为 SSL 和非 SSL 连接配置的示例 sqlhosts 文件:


清单 13. SSL 的 sqlhosts 条目

                                     

demo_on1 onsoctcp demohost 1111

demo_on2 onsocssl demohost 1112

demo_on3 drsocssl demohost 1113

           

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值