Informix 11.70 系统管理认证考试 919 准备教程,第 8 部分: 安全性

数据安全对于数据库管理员来说始终是个大问题。本教程有助于您了解如何通过预防对数据或数据库对象的未授权查看和更改来保护数据安全,包括如何使用数据库服务器的安全审计工具来监控数据库活动。本教程可用于备考 Informix® v11.70 系统管理认证考试 919 第 8 部分。

Yunming Wang, 高级支持工程师, IBM

Yunming Wang 是 IBM Informix Advanced Problem Diagnostics (APD) 团队的高级支持工程师。他从 1998 年开始在 IBM 负责 Informix 方面的工作,专注于 Informix 和 DB2 编程 API 和数据库连接。专业领域包括 ODBC、JDBC、OLEDB/.Net、ESQL/C 和 TCP/IP。最近,他加入了一个 IDS 虚拟应用程序项目,负责处理虚拟化和云计算技术。在加入 Informix 之前,他是一名软件开发人员。他于 1995 年获得了阿肯色大学(University of Arkansas)的计算机工程硕士学位。



Tim Steele, 高级支持工程师, IBM China

Tim Steele 的照片Tim Steele 是 IBM Informix 的高级支持工程师,自 2000 年就开始从事 Informix 相关工作。他是 IBM 认证的 Informix 11.70 系统管理员。他还是 Australian Follow The Sun (FTS) Hub 的一员,该组织提供全球 Informix 技术支持,尤其注重关键的 down-system 问题。



2012 年 8 月 20 日

开始之前

关于本系列

考虑过 IBM Informix 版本 11.70(考试 919)的系统管理认证吗?如果考虑过,那么这将是个很好的起点。本 IBM Informix 认证备考教程系列 涵盖了参加考试所需了解的所有主题。即使目前不打算参加认证考试,本教程系列也有助于您了解 IBM Informix 11.70 中的新特性。

关于本教程

在本教程中,您将了解到如何通过预防对数据或其他数据库对象进行未授权查看和更改来保障数据安全。此处提供的材料主要包括考试第 8 部分的相关内容,标题为 Security,本教程涉及的主题包括:

  • 连接安全
  • 网络加密
  • 审计
  • 自主访问控制

目标

通过对本教程的学习,您将能够:

  • 了解身份验证、授权和加密的概念及使用方法
  • 允许 non-OS 用户访问数据库
  • 利用 onaudit 在数据库服务器上设置并配置安全审计
  • 利用可信连接和可信上下文连接来增强安全性
  • 使用角色特权来保护数据安全
  • 设置角色分离来加强对数据库服务器用户的访问控制

先决条件

Informix 11.70 安装在本系列教程的第 1 部分进行了介绍。如果还没安装,可下载并安装 IBM Informix 11.70 的副本。Informix 服务器能够帮助您了解 IBM Informix V11.70 系统管理认证考试当中涉及的许多概念。

系统要求

学习本教程时,不需要 IBM Informix 的副本。但是,如果下载了 Informix Innovator-C Edition(参见 参考资料)的免费试用版,并与本教程配套使用,您将收获更大。


理解连接安全

数据库连接安全利用身份验证及授权流程来避免对数据库服务器的未授权访问。作为数据库管理员 (DBA),您可以配置 Informix 服务器认证机制来满足不同需求,比如本地及远程连接所需的不同安全方法、没有服务器主机上操作系统帐户的用户对数据库的访问,以及 non-root 安装。还可以授权已经过身份验证的用户来执行特定的数据库操作,或者根据具体需求来访问特定数据库对象。在配置 Informix 身份验证时,DBA 应当考虑如何验证用户名及密码:

  • 是否应在服务器上对用户进行身份验证?
  • non-OS 用户是否需要连接到 Informix 数据库?
  • 在系统上执行的当前安全策略是什么?
  • 有哪些可用的身份验证方法?

在 Informix 11.70 当中,可通过不同方式来配置身份验证:

  • 利用 OS 来验证用户的合法性。该机制要求用户具有 Informix 主机上的有效 OS 用户帐户,并被数据库系统管理员 (DBSA) 授予了连接特权。
  • 利用 Informix 服务器支持的自定义身份验证机制,包括 UNIX 或者 Linux 上的插入式身份验证模块 (PAM),以及 Windows 上的轻量级目录访问协议 (LDAP)。
  • 利用映射的用户。本机制是 Informix 11.70 的新功能,用于在降低对系统管理员的依赖性以及 root 级别的特权时维护安全。
  • 利用单点登录 (SSO),当用户利用 Kerberos 登录到客户端计算机的操作系统后,不再需要提供用户名和密码。

通过可信上下文数据库对象来确定可信连接,可在三层应用模型当中提升系统性能与安全性。通过可信上下文对象所建立的可信连接,与在 UNIX 或 Linux 当中配置 hosts.equiv 或 .rhosts 文件的可信系统在概念上有所不同。

了解插入式验证模块

插入式验证模块 (PAM) 使得系统管理员能够根据其业务需求为不同的应用程序实现不同的身份验证机制。确保 Informix 服务器的操作系统支持 PAM。

PAM 模块决定是否可通过密码对用户进行身份验证,或是对质询做出正确响应,或是两者的组合。Informix 11.70 所支持的模式是密码模式和质询-响应模式。在密码模式中,用户密码足以完成身份验证。在质询-响应模式中,服务器提出质询,客户端发送响应。只有响应同预期的一样时,客户端才能访问数据库。当 Informix 服务器配置为使用 PAM 模块进行身份验证时,默认的身份验证会被忽略。

要配置 Informix 服务器来使用 PAM,系统管理员必须了解:

  • 通常位于 /usr/lib/security 目录中的 PAM 模块名称及其参数在 /etc/pam.conf 中列出。在 Linux 中,/etc/pam.conf 文件可由目录 /etc/pam.d 替换,其中每个 PAM 服务都有对应的文件。如果 /etc/pam.d 存在,Linux 将会忽略 /etc/pam.conf。
  • PAM 模块是否会在接收了简单的用户名密码组合后,提出质询。

必须要修改数据库服务器上 sqlhosts 文件中的服务器条目来支持 PAM 身份验证。如果应用程序和服务器位于单独的计算机中,或者在单个计算机中的不同位置,那么需要同时为客户端和服务器修改 sqlhosts。

表 1 列出了 sqlhosts 中关于 PAM 服务的设置。

表 1. 设置 PAM 服务
选项描述设置
pam_serv数据库服务器所使用的 PAM 服务的名称PAM 服务通常位于 /usr/lib/security 目录中,其参数在 /etc/pam.conf 文件中列出。在 Linux 中,/etc/pam.conf 文件可由目录 /etc/pam.d 替换,其中每个 PAM 服务都对应一个文件。如果 /etc/pam.d 存在,Linux 会忽略 /etc/pam.conf。
pamauthPAM 服务所使用的身份验证方法。利用这一验证模式,应用程序必须设计为在连接到数据库服务器之前,正确响应质询提示。pamauth=password 使用连接请求密码进行身份验证。pamauth=challenge 身份验证则需要针对问题或提示提供正确的用户答复。

需要将 s 选项设置为 4 来启用 PAM 服务。

清单 1 展示了 sqlhosts 条目,用于使用质询来启用 PAM 身份验证。

清单 1. 使用质询来启用 PAM 身份验证
#Authentication mode: challenge 
ifxserver2 oltlitcp servermc portnum2 s=4, pam_serv=(pam_pass), pamauth=(challenge)

清单 2 展示了只需一个密码就可启用 PAM 身份验证的另一个 sqlhosts 条目。

清单 2. 启用仅需密码质询的 PAM 身份验证
#Authentication mode: password
ifxserver2 oltlitcp servermc portnum2 s=4, pam_serv=(pam_pass), pamauth=(password)

当操作系统或者第三方 PAM 模块(共享库)加载到 informix 用户线程时,PAM 模块所需的堆栈大小无法事先确定。可通过将 onconfig 参数 PAM_STACKSIZE 设置为较大的值,从而为 PAM 模块定制堆栈大小,如 清单 3 所示。

清单 3. 在 onconfig 文件中设置 PAM_STACKSIZE
PAM_STACKSIZE 64 # Stack size needed for the PAM modules (kilobytes)

在 UNIX 中,PAM_STACKSIZE 的默认值是 32 KB。在 Linux 中,默认值是 128 KB 加上 STACKSIZE 配置参数的值。

并非所有 IBM Informix 产品和工具都支持 PAM。可在 Informix 信息中心(参见 参考资料)查找有关身份验证模块兼容性问题的更多信息。

了解 Windows 中的 LDAP 身份验证

与在 UNIX 和 Linux 中使用 PAM 类似,可在 Windows 中为不同的验证机制设置并配置 LDAP。需要为特定的 LDAP 身份验证创建自已的 LDAP 验证模块。

验证模块是一个 DLL,通常位于 %INFORMIXDIR%\dbssodir\lib\security 目录中。模块参数在 %INFORMIXDIR%\dbssodir\pam.conf 文件中列出。具有完整功能的 LDAP 验证模块的源代码以及所需配置文件的样例都包括在 %INFORMIXDIR%\demo\authentication 目录中。

并非所有 IBM Informix 产品和工具都支持 PAM。可在 Informix 信息中心(参见参考资料)查找有关验证模块兼容性问题的更多信息。

要想在 Informix 服务器中使用 LDAP 验证模块,需要确保具有可用的 LDAP 服务器和 LDAP 客户端系统。可将 IBM Directory Server 或者 openLDAP 用作 LDAP 客户端系统。

可采用 PAM 配置文件模板来配置自己的 LDAP 模块,方法是将模板文件 pam.conf_tmpl 复制到 %INFORMIXDIR%\dbssodir\etc,重命名为 pam.conf,并进行自定义。

要想将服务器配置为使用 LDAP 身份验证支持模块,必须使用 LDAP 模块的名称及其验证模式来编辑 sqlhosts 文件。清单 4 展示了配置为使用 PAM 质询验证的 Informix 服务器。

清单 4. 采用 PAM 质询验证
ifxserver1 onsoctcp servermc portnum1 s=4,pam_serv=(pam_chal),pamauth=(challenge)

清单 5 展示配置为使用 PAM 密码验证的 Informix 服务器。

清单 5. 采用 PAM 密码验证
ifxserver2 onsoctcp servermc portnum2 s=4,pam_serv=(pam_pass),pamauth=(password)

可在 Informix 信息中心查找有关如何安装与自定义 LDAP 验证模块的更多信息。

映射用户(UNIX 或 Linux)

自 Informix 版本 11.70 起,Informix 通过将外部验证的用户映射到适当的用户及组权限,从而允许他们访问数据库服务器,而不必考虑这些用户是否具有 IBM Informix 主机上的本地操作系统帐户。该特性仅可用于 UNIX 或者 Linux 系统。通过 SSO 或者 PAM 验证的外部用户可被映射以下任一位置:

  • 在数据库服务器中定义的 UID 和 GID 对,但没有确定为服务器主机上的 OS 帐户
  • 数据库服务器主机中现有的 OS 用户帐户

通过用户映射获取数据库访问权限的用户被称为映射用户。只有 DBSA 能够创建映射用户。

当 DBSA 为外部验证用户授予数据库服务器访问权限时,映射到这些用户的权限被称为代理用户属性。代理用户属性包括以下一个或多个内容:

  • 用户 ID
  • 组 ID
  • OS 用户名
  • 组名
  • 主目录

此映射用户功能可以帮助那些事先并不了解所有合法用户(将需要数据库服务器的访问权限)的 DBSA 和系统管理员。

DBSA 通过在 SQL 中运行 GRANT ACCESS TO 命令将用户映射到代理用户属性。

允许连接到不具有相应的 OS 用户帐户的数据库,这会更改默认的 Informix 配置。必须设置 USERMAPPING 配置参数来允许映射用户成功访问数据库。当创建新的 Informix 实例或者完成一次升级时,需要将 Access 设置为 OFF。

删除在访问数据库服务器时对本地主机 OS 帐户的依赖可减少管理工作量。有了映射用户,DBSA 不需要与 OS 管理员协调工作来确保每个应当具有 Informix 访问权限的用户同时具有 OS 帐户。然而,在很多环境中,还需考虑其他问题,Informix 访问还需要主机 OS 级别的用户身份。

在开始创建映射用户之前,必须验证如下内容:

  • 具有完成此任务的 DBSA 特权。
  • 那些需要映射到代理用户属性来访问 Informix 的用户,可使用单点登录 (SSO) 或者插入式验证模块 (PAM) 进行外部验证。
  • Informix 服务器实例配置为通过 PAM 或者 SSO 来接受验证。

完成如下步骤来创建映射用户。

  1. 将 onconfig 文件的 USERMAPPING 参数设置为以下两个值之一:
    • BASIC:非 Informix 管理特权,不管用户映射到哪个 UID 或者 GID。
    • ADMIN:可能具有 Informix 管理特权。授予任何用户非管理特权,直到运行 GRANT ACCESS TO 语句的 AUTHORIZATION 为止。通常,如果将这一参数设置为 ADMIN,那么仅计划给少数单独的映射用户授予管理特权。
  2. 利用 GRANT ACCESS TO 语句来指定代理用户属性。该语句从外部将已验证的用户映射到支持 Informix 访问的属性。如果想要为映射用户授予管理特权,必须包含关键字 AUTHORIZATION,并加上想要授予用户所指定角色的值。运行 GRANT ACCESS TO 语句后,会在 SYSUSER 数据库中的用户映射表中增加新的行。

注意:仅当映射用户使用 SSO 或 PAM 进行身份验证时,他们才可以访问具有代理用户属性的 Informix。

使用单点登录身份验证

单点登录 (SSO) 是一种验证机制,在用户登录到客户端操作系统后,不需要提供用户名和密码。有了 SSO,当用户首次登录到客户端计算机(或者 Windows 域)后,会出现 DBMS 和其他启用 SSO 服务的身份验证。Kerberos 实现验证用户凭证。Kerberos 身份验证生成一个秘密密钥系统,用来存储登录凭证。当用户行为试图访问 Informix 数据库时,通过票据授予票据 (TKTs) 交换来允许不需登录提示即可访问数据库。

SSO 身份验证采用以下两种开放计算标准:

通用安全服务应用编程接口 (GSSAPI)
互连网工程任务组 (IETF) 标准 RFC 2743 定义的 API,用于客户端-服务器身份验证。
Kerberos 安全协议
RFC 1510,定义典型密钥交换机制,应用程序可以使用 Kerberos 服务对其用户进行身份验证,并交换包含凭证的加密密钥。

通用安全服务通信支持模块 (GSSCSM) 不能与简单密码和加密模块一起使用(SPWDCSM 与 ENCCSM)。SSO 采用 GSSCSM 支持 PAM 与 LDAP,但它不支持相互验证。

对于点单登录,用户登录及身份验证必须采用 Kerberos 5 网络基础架构,其中包括一台专用的密钥分发中心计算机。

以下是为 Informix 部署 Kerberos SSO 的高级步骤:

  1. 在网络中将计算机配置为可以与 Kerberos 5 身份验证协议一起使用。该部分内容包括了设置受保护的计算机来托管密钥分发中心 (KDC)。可能网络已经使用 Kerberos 机制进行了设置。
  2. 在 KDC 中创建客户端用户主体和 Informix 服务主体。(参见 参考资料)。
  3. 在托管数据库服务器的计算机上配置 sqlhosts 信息和 GSSCSM。
  4. 配置 Informix 服务主体密钥,确保其位于托管数据库服务器的计算机。
  5. 配置具有 GSSCSM 功能的数据库客户端程序(参见 参考资料)。

要想为 SSO 配置 Informix 实例来支持 SSO,需要在 Informix Information Center 中完成以下任务:

  1. 设置 SQLHOSTS 信息来支持 SSO
  2. 设置 concsm.cfg 文件来支持 SSO
  3. 确保 keytab 文件具有所需的密钥(UNIX 和 Linux)
  4. 验证 Informix 在 SSO 中是否使用了 Kerberos 身份验证

了解可信上下文

在一个三层的应用程序模型中,所有数据库用户必须使用其用户 ID 和密码登录到中间层。然后,中间层将会利用不同的用户 ID 和密码连接到数据库服务器。如果采用了可信上下文数据库对象,就可以确立应用程序到数据库之间的可信连接,从而实现:

  • 提高系统安全性
  • 提高整体系统性能
  • 减少维护开销
  • 控制用户特权
  • 保持用户访问的相关审计功能

通过可信上下文对象实现的可信连接,还允许应用程序开发人员维护其访问数据库的用户 ID,或者与其他用户共享单个数据库连接。

只有已经被授予 DBSECADM 角色的用户 ID 才能创建、修改、重命名,以及删除可信上下文对象。

创建可信上下文对象时,要考虑如下问题:

  • 需要给可信上下文对象的用户分配何种角色与权限
  • 哪些客户端位置可信
  • 哪种使用需要进行身份验证

上下文对象可以获得以下任何内容:

  • 定义可信连接的属性或者位置
  • 可信连接用户的身份验证需求
  • 用于定义可信连接用户访问特权的角色

如果一个可信连接请求与可信连接上下文对象的所有属性匹配,那么系统将授予可信连接。如果连接请求包含与可信连接上下文对象不匹配的属性,那么系统将拒绝该请求。

通过可信上下文数据库对象建立可信连接需要两步操作:

  1. 创建具有语句 CREATE TRUSTED CONTEXT 的可信上下文数据库对象。必须具有运行该语句的数据库安全管理员 (DBSECADM)。确保以下内容正确:
    • 子句 ATTRIBUTES、DEFAULT ROLE、ENABLE,以及 WITH USE 只能指定一次。
    • 每个属性名称及相应的值必须惟一。

    清单 6 中的示例创建了一个名为 appserver 的可信上下文对象,这样,基于 appserver 的可信连接上的当前用户 john 就能够切换到两个不同用户:joebob。当前用户 john 切换到 joe 时,不需要身份验证,但当切换到 bob 时需要身份验证。

    清单 6. 通过可信上下文数据库对象来建立可信连接
    CREATE TRUSTED CONTEXT appserver 
        USER john
        DEFAULT ROLE MANAGER
        ENABLE
        ATTRIBUTES (ADDRESS '9.26.113.204')
        WITH USE FOR joe WITHOUT AUTHENTICATION,
            bob WITH AUTHENTICATION;
  2. 在数据库应用程序中创建可信连接。想要创建可信连接,应用程序必须是采用 TCP/IP 来连接到 Informix 服务器。不支持本地通信协议。确保以下内容正确设置:
    • 已启用可信上下文对象。
    • 用户 ID 具有到数据库的 CONNECT 权限。
    • 用户 ID 匹配可信上下文对象中的主用户 ID。
    • 连接请求来自可信上下文对象中定义的可信位置。

    以下 API 可用于请求可信连接:

    • IBM Informix ESQL/C
    • IBM Informix JDBC Driver
    • IBM Informix ODBC Driver
    • IBM Data Server Driver for JDBC and SQLJ
    • IBM Data Server Provider for .NET

    清单 7 中的示例通过在现有 CONNECT 语句中添加 TRUSTED 关键字,从而在 ESQL/C 中创建了一个可信连接。

    清单 7. 添加 TRUSTED 关键字
    EXEC SQL CONNECT TO 'database_name' TRUSTED;

指定适用于在可信连接中切换用户的角色。


采用网络加密

加密是将数据转换为无法识别形式的过程,用于防止对数据的未授权使用。网络加密是指对客户端与服务器之间,以及服务器之间所传输的数据进行加密。

未加密的数据称为明文,因为它通常是以可理解的方式存储。加密后的数据称为密文,因为它是以秘密且难以理解的形式存储。可利用加密-解密算法或者密码将未加密明文转换为加密密文。可根据在加密算法中所使用的加密密钥类型对密码进行分类,如下所示:

私钥加密
用同一个密钥进行加密和解密。也称为对称加密
公钥加密
用于加密的密钥与用于解密的密钥不同。也称为非对称加密

Informix 仅支持适用于网络数据加密的对称加密。

可为 Informix 服务器配置以下网络加密选项之一:

  • 集成通信支持模块 (CSM),是具有标准加密库的完整数据加密。
  • 安全套接字层 (SSL),是一种通信协议,通过可靠的、端对端的安全连接对数据通信使用加密。

SSL 广泛使用于替代 IBM Informix CSM。可将 SSL 用于 DRDA 与 SQLI 客户端之间的加密通信,但 CSM 仅能用于 SQLI 客户端之间的连接。

还可配置具有 SSL 连接的 CSM。然而,需要额外配置工作的冗余 CSM 加密功能不会带来什么额外收益。

可配置插入式验证模块 (PAM) 以及通用安全服务通信支持模块 (GSSCSM),后者在 SSL 连接的单点登录 (SSO) 当中采用 Kerberos 5 安全协议。

理解 CSM 加密

Informix 中的通信支持模块 (CSM) 加密选项提供具有标准加密库的完整数据加密,并提供很多配置选项。消息认证代码 (MAC) 作为加密数据传输的一部分来传输,从而确保数据的完整性。可采用 CSM 来加密数据传输,包括网络上的分布式查询。

CSM 具有以下限制条件:

  • 加密 CSM 不可与简单密码 CSM 同时使用。
  • 不可在复用连接中使用 CSM。
  • 企业复制及高可用性集群不能使用配置 CSM 的连接。
  • 加密连接与非加密连接不能在同一端口上混用。

通过以下高级别的步骤,可以启用 Informix 服务器中的 CSM 数据加密功能:

  1. 定位 concsm.cfg 文件,插入描述用于数据加密的 CSM 条目。oncsm.cfg 文件默认位于 $INFORMIXDIR/ect 中,可将其放到主机上的任何位置,并将环境变量 INFORMIXCONCSMCFG 设置为新位置的完整路径名。

    如果 oncsm.cfg 文件不存在,可进行创建。可利用 $INFORMIXDIR/ect/concsm.example 中的示例。

  2. 在 concsm.cfg 文件中添加有关 CSM 的条目。该条目指定了要使用的加密库和加密选项。必须在加密选项中指定要使用的密码和模式。每个条目必须符合以下限制:
    • 以下字符不能用于库路径名:
      • =(等号)
      • "(双引号)
      • ,(逗号)
    • 如果空格是路径名的一部分则可使用,否则不可以使用。
    • 长度限制为 1024 字节。

    可指定以下加密选项类型:

    • 加密期间采用的 DES 与 AES 密码
    • 加密的模式
    • 消息认证代码 (MAC) 密钥文件
    • MAC 级别
    • 密码与密钥的转换频率

    可用以下方法之一来指定加密选项。

    在 concsm.cfg 中调用加密参数文件
    这一方法很简单。清单 8 展示了一个加密参数文件,该文件指出为该连接采用所有可用密码,并指出每隔 120 分钟转换一次密码,每隔 60 分钟重新协商一次秘密密钥。
    清单 8. 调用加密参数文件
    ENCCSM_CIPHERS all 
    ENCCSM_SWITCH 120,60 
    ENCCSM_MAC medium 
    ENCCSM_MACFILES /usr/informix/etc/MacKey.dat

    清单 9 演示了 concsm.cfg 文件中的一行,该行使用参数文件 encrypt.txt 指定加密:

    清单 9. 使用 encrypt.txt 文件指定加密。
    ENCCSM("usr/informix/lib/cms/iencs11a.so","config=/usr/lib/encrypt.txt")
    在 concsm.cfg 中使用加密标记
    清单 10 展示了在 oncsm.cfg 文件中使用加密标记的条目,该文件使用所有可用的密码,例外情况是 Blowfish 密码不使用 ECB 模式的任何密码。
    清单 10. 在 concsm.cfg 中使用加密标记
    ENCCSM("INFORMIXDIR/lib/csm/iencs11a.so","cipher[allbut:<ecb,bf>]")
  3. 生成 MAC 密钥文件,该文件包含用于加密消息的加密密钥。该 MAC 密钥文件还需要在 Informix 客户端与服务器之间启用数据加密。默认的 MAC 密钥文件是由 IBM Informix 提供的内置文件。该文件提供受限消息验证(对来自 IBM Informix 客户端或者服务器消息的验证与确认)。站点生成的 MAC 密钥文件执行最严格的验证。可使用 GenMacKey 工具生成密钥文件。清单 11 生成名为 IfxMacKey.dat 的 MAC 密钥文件。

    清单 11. 创建 MAC 密钥文件
    cd $INFORMIXDIR/etc 
    GenMacKey -o IfxMacKey.dat

    如果没有指定密钥文件名,GenMacKey 将会采用默认名称 MacKey.dat。您需要使用安全复制或者安全 FTP 将生成的 MAC 密钥文件传输到远程客户端机器。GenMacKey 工具根据 MAC 密钥文件的创建时间来确定其优先级。内置密钥文件优先级最低。如果没有 MAC 密钥文件,会默认使用内置的 MAC 密钥。然而,如果使用 MAC 密钥文件,默认的内置 MAC 密钥则被禁用。

  4. 在 sqlhosts 文件的选项列或者注册表中启用 CSM。sqlhosts 文件中 CSM 选项的格式为 csm=(name,options)。name 值必须与 concsm.cfg 文件中的 name 条目匹配。sqlhosts 文件中定义的 CSM 选项覆盖了 concsm.cfg 文件中指定的选项。不能在 sqlhosts 文件中指定 CSM 加密选项。如果不指定 csm 选项,数据库服务器会采用默认验证策略。表 2 展示了可用的 CSM 选项。

    注意:不推荐使用 s=7 选项,在单点登录 (SSO) CSM 中不需要该选项。

表 2. sqlhosts 文件的 CSM 选项
选项意义描述设置
p密码该选项可用于简单密码 CSM,提供密码加密。
  • p=0 不需要密码(默认选项)
  • p=1 需要密码
c保密服务来自和传送给 SSO 已验证用户的数据被加密,用户只有凭借授权凭证登录后才能查看。该选项是通用安全服务 CSM 的一部分,它支持单点登录 (SSO)。
  • c=1 启用服务(默认)
  • c=0 禁用服务
i完整性服务确保在用户与 DBMS 之间发送的数据在传输期间不被修改。该选项是通用安全服务 CSM 的一部分,支持单点登录 (SSO)。
  • i=1 启用服务(默认)
  • i=0 禁用服务

清单 12 展示 Informix 服务器 ids1170fc4_encrypt 配置为采用 CSM ENCCSM,与 oncsm.cfg 文件中指定的内容相同。

清单 12. 使用 ENCCSM 文件
Ids1170fc4_encrypt onsoctcp idshost.informix.ibm.com 9889 csm=(ENCCSM)

其中 ENCCSM 是在 oncsm.cfg 文件中为 CSM 指定的名字。

了解 SSL 加密

安全套接字层 (SSL) 协议在网络中两点之间通过可靠的、端到端安全连接使用加密技术来提供数据私密性与完整性。

与 Informix 通信支持模块 (CSM) 相比,SSL 协议有以下优势:

  • SSL 使用广泛,可替代 IBM Informix CSM。
  • 可利用 SSL 对 DRDA 及 SQLI 客户端的通信进行加密。

可将 SSL 协议应用于所有类型的连接,包括客户端-服务器连接,以及服务器-服务器连接。

SSL 利用数字证书来交换用于加密和服务器身份验证的密钥。发出数字证书的可信实体被称为证书颁发机构 (CA)。CA 颁发具有一定时限的数字证书。超过有效期后,必须申请其他数字证书。

SSL 采用对称密钥(秘密密钥或私钥)算法进行数据加密,但它采用非对称密钥(公共密钥)算法来交换用于对称算法中的秘密密钥。

通常,需要以下两步来建立新的 SSL 连接:

  1. 通过客户端验证来自服务器的数字证书进行握手,从而建立安全连接
  2. 密码交换:客户端生成随机对称密钥,并发送给服务器

成功完成以上两步操作后,客户端与服务器会对会话期间的数据进行加密。

Informix 使用一个密钥库(受保护的数据库)来存储 SSL 密钥和数字证书。客户端与服务器都必需具有密钥库。服务器密钥库存储其数字证书和 Informix 连接的所有其他服务器的 root CA 证书。服务器密钥库必须位于 INFORMIXDIR/ssl 目录中,且必须命名为 server_name.kdb,其中 server_name 是 DBSERVERNAME 配置参数中所指定的值。Informix 客户端的密钥库存储客户端连接的所有服务器的 root CA 证书。客户端密钥库的密码是可选择的。

每个 Informix 实例必须有各自的密钥库,密钥库受密码保护,Informix 必须了解该密码,这样它才能检索用于 SSL 通信的数字证书。

可利用 IBM Global Security Kit (GSKit) 来生成运行 SSL 所需的密钥。GSKit 与 Informix 服务器及客户端 (CSDK) 安装在一起,可为 SSL 通信提供库与工具。GSKit 包含用于管理密钥、证书与认证请求的 GSKCapiCmd 命令行界面。

完成以下步骤,将 IDS 配置为使用 SSL。

  1. 设置 Informix ONCONFIG。
    1. 为 SSL 连接配置服务器名与服务器别名。
    2. 利用 VPCLASS onconfig 参数来配置加密 VP。比如,输入 VPCLASS encrypt, num=3。如果未配置 VPCLASS,IDS 将会默认启动一个加密 VP。
    3. 利用 NETTYPE onconfig 参数配置用于 SSL 连接的轮询线程。如果未配置轮询线程,IDS 将会启动一个轮询线程。例如,输入 NETTYPE socssl,3,50,NET
    4. 在密钥库中配置用于服务器数字证书的 SSL_KEYSTORE_LABEL。例如,输入 SSL_KEYSTORE_LABEL myssllabel。如未配置,服务器将会使用密钥库中的默认标签来用于 SSL 通信。
  2. 配置或创建 $INFORMIXDIR/etc/conssl.cfg 文件。该文件仅用于 SQLI 客户端,包含 dbaccess、dbimport、esql 等应用程序。该文件包含客户端密钥库的完全限定文件名,以及客户端存储文件的完全限定文件名。

    以下是位于 onssl.cfg 文件中的客户端配置参数及其描述。

    SSL_KEYSTORE_FILE
    这是密钥库的完全限定文件名,存储客户端连接的所有服务器的 root CA 证书。
    SSL_KEYSTORE_STH
    这是存储文件的完全限定文件名,包含加密的密钥库密码。

    清单 13 展示相关示例。

    清单 13. 输入客户端配置参数
    SSL_KEYSTORE_FILE /u/keystores/clikeydb.kdb 
    SSL_KEYSTORE_STH /u/keystores/clikeydb.sth

    如果 conssl.cfg 不存在,客户端密钥库及存储文件将默认为 $INFORMIXDIR/etc/client.kdb 和 $INFORMIXDIR/etc/client.sth。

  3. 设置 sqlhosts 来配置采用 onsocssl SSL 协议的服务器名。需要更新 sqlhosts (UNIX) 文件或者 SQLHOSTS 注册表 (Windows) 中的连接信息来包括 SSL 连接的相关信息。在 Informix SQLI 连接中采用 onsocssl 协议,在 DRDA 连接中采用 drsocssl 协议。

    表 3 展示了为 SSL 与非 SSL 连接配置的 sqlhosts 文件示例。

表 3. 为 SSL 连接配置的 sqlhosts 文件示例
服务器名协议主机名服务器名
sf_ononsoctcpsanfranciscosf_serv
oak_ononsocssloaklandoak_serv
sac_ondrsocsslsacramentosac_serv
  1. 创建一个服务器密钥库。利用 iKeyman 工具、GSKCmd 命令行界面或者 GSKCapiCmd 命令行界面设置密钥库及其密码存储文件和数字证书。iKeyman 工具和 GSKCmd 工具需要 JRE 1.6 或更新版本的支持。GSKCapiCmd 工具是 GSKit(参见参考资料)的一部分,而且不需要 Java。

    利用 清单 14 中的代码,在 INFORMIXDIR/ssl 目录中创建密钥库及其存储文件。

    清单 14. 创建密钥库和存储文件
    $INFORMIXDIR/ssl/servername.kdb
    $INFORMIXDIR/ssl/servername.sth

    其中 servername 是 DBSERVERNAME onconfig 参数的值。

    建议将密钥库和存储文件的权限更改为 664/informix:informix,如 清单 15 所示。

    清单 15. 更改密钥库和存储文件的权限
    gsk8capicmd -keydb -create -db oak_on.kdb -pw mypasswd -type cms -stash
    gsk8capicmd -cert -create -db oak_on.kdb -pw mypasswd -label myssllabel 
                -size 1024 -default_cert yes

    注意:如果 DBSA 将数据库服务器配置为采用不同版本的 GSKit,那么特定版本的 gsk8capicmd 命令必须替换为来自不同 GSKit 版本的命令,比如 gsk7capicmd

    将证书导出为 ASCII 文件(将导入到客户端密钥库),如 清单 16 所示。

    清单 16. 导出证书
    gsk8capicmd -cert -extract -db oak_on.kdb -format ascii -label myssllabel 
                -pw mypasswd -target myssllabel.cert
  2. 利用 GSKit 导入服务器证书,创建客户端密钥库,如 清单 17 所示。
    清单 17. 导入服务器证书
    gsk8capicmd -keydb -create -db clikeydb.kdb -pw mypasswd -type cms -stash
    gsk8capicmd -cert -add -db clikeydb.kdb -pw mypasswd -label myssllabel 
                -file myssllabel.cert -format ascii

    将密钥库和存储文件的权限更改为 664/informix:informix。在包含 CSDK 或者 I-Connect 的 INFORMIXDIR 中,应当开放读取权限。如果 INFORMIXDIR 仅包含 IDS,可仅采用 600 或者 640 权限。

  3. 完成以下步骤来初始化服务器:
    1. 将服务器及客户端密钥库移到指定位置(如上文所述)。
    2. 初始化服务器。客户端与服务器之间配置了 SSL 的端口上的所有通信均采用 SSL 协议进行加密。

使用审计功能

审计功能会创建所选的用户执行的活动记录。审计基于审计事件及审计掩码的概念。审计需要进行配置,然后在 Informix 服务器上设置。还可在不需要时关闭该功能。

使用审计事件

任何可能修改或者泄露数据的数据库服务器活动都被认为是审计事件。当事件成功或失败时,或者当有活动发生时,可利用数据库服务器安全审计设备审计事件并保存事件记录。每个审计事件都由一个四字符的事件代码来识别。共有 150 多个可审计事件。以下是一些常用事件代码:

  • ACTB:访问表。
  • UPRW:更新当前行。
  • STEX:设置说明。
  • RDRW:读取行。
  • DLRW:删除行。

使用审计掩码

审计掩码用于指定必须审计的数据库服务器事件。可在掩码中包含任何事件。掩码与用户 IDs 相关联,这样就可以记录用户 ID 采取的指定操作。在系统中为所有用户指定全局掩码 _default、_require 和 _exclude。表 4 列出了四类审计掩码。

表 4. 审计掩码类型
掩码类型掩码名
个人用户掩码Username
默认掩码_default
全局掩码_require 和 _exclude
模板掩码_maskname

用户掩码

全局掩码始终适用于会话过程中执行的用户操作,其中审计功能已打开。审计掩码采用如下顺序应用:

  1. 个人用户掩码,如果没有,则是 _default 掩码
  2. _require 掩码
  3. _exclude 掩码

当用户启动数据库访问权限时,数据库服务器会检查是否存在与用户所用帐户具有相同用户名的个人用户掩码。如果存在个人用户掩码,则数据库服务器首先读取其中的审计指令,并忽略 _default 掩码。如果不存在个人用户掩码,数据库服务器将读取 _default 掩码中的审计指令并将其应用到用户。

模板掩码

可创建模板审计掩码,这有助于为重复情况或者各种类型的用户设置审计功能。模板掩码名以 underscore (_) 开始。

使用审计指令

掩码及其事件称为审计指令。可从最小审计指令到最大审计指令之间进行选择,最小审计指令不审计任何事件,最大审计指令会审计所有用户的所有安全相关数据库服务器事件。onaudit 工具用于所有审计掩码的创建与维护。

可选行级别审计

在 Informix 11.70 中,可配置审计功能,这样就可在审计跟踪中仅对所选表中的行级别事件进行记录。在以前的版本中,审计是一种全有或全无 (all-or-nothing) 类型的活动,可选行级别审计能够压缩审计记录,这样就更易于管理,这将会提高数据库服务器的性能。

Informix 11.70 添加了新的表级别属性 AUDIT,可通过 CREATE TABLE 或者 ALTER TABLE 命令来指定,如 清单 18 所示。AUDIT 属性控制特定表的审计。

清单 18. CREATE 命令与 ALTER TABLE 命令示例
CREATE TABLE {existing syntax} | with AUDIT;
ALTER TABLE {existing syntax} | add AUDIT;
ALTER TABLE {existing syntax} | drop AUDIT;

onaudit 工具支持选项(-R 标志),该选项可通过运行来启用可选行级别审计。可在最初开始审计数据库、或在审计工具已运行时启动可选行级别审计。

了解审计流程

当运行审计功能时,数据库服务器为审计指令所指定的每一事件生成审计记录。数据库服务器将审计记录存储在一个称作 “审计文件” 的文件中。(审计跟踪可能包括多个审计文件。)

审计管理员必须指定并维护审计配置,该配置包含以下信息:

  • 审计模式
  • 如果在向审计跟踪中写入审计记录时出错,数据库服务器将如何处理
  • 对于 UNIX,查找审计跟踪的目录
  • 对于 UNIX,在数据库服务器自动启动其他审计文件之前,审计文件的最大值。

审计配置

完成以下步骤来设置审计配置。

  1. 打开或关闭审计功能。可通过 onaudit 工具来打开或关闭审计功能。
  2. 指定审计模式。ADTCFG 文件中的 ADTMODE 设置审计的类型与级别。
  3. 使用 ADTCFG 文件。ADTCFG 文件中的配置参数指定审计配置的属性。这些配置参数为 ADTERR、ADTMODE、ADTPATH,以及 ADTSIZE。默认 ADTCFG 文件的路径名是 $INFORMIXDIR/aaodir/adtcfg(对于 UNIX)和 %INFORMIXDIR%\aaodir\adtcfg(对于 Windows)。
  4. 在 UNIX 中,确定审计文件的属性。审计文件位于通过 ADTPATH onconfiguration 参数所指定的目录中。审计文件的命名约定是 dbservername.integer,其中 dbservername 是 onconfig 文件中所定义的数据库服务器名,而 integer 是在 ADTLOG 文件中所定义数字的下一个可用整数。

在 Informix 服务器中设置审计

在 Informix 服务器中设置审计需要完成以下高级别的步骤:

  1. 利用 onaudit 工具向审计掩码中添加审计事件。清单 19 中的命令展示了如何通过四字符事件代码将 Update Audit Mask 与 Delete Audit Mask 审计事件添加到 _default 掩码中。
    清单 19. 添加事件
     $ onaudit -m -u _default -e +UPAM,DRAM
  2. 确认 清单 20 中的审计掩码设置。
    清单 20. 确认事件掩码设置
    $ onaudit -o -u _default 
    _default - UPAM,DRAM
  3. 在 UNIX 中为审计跟踪指定目录。数据库服务器将审计文件存储在一个文件系统目录中。可利用 onaudit 工具指定该目录,如 清单 21 所示。
    清单 21. 使用 onaudit 工具
    $ onaudit -p /work/audit
  4. 利用 $onaudit -c 命令检查审计配置。在 清单 22 中展示了配置结果。
    清单 22. 检查审计配置
    Onaudit -- Audit Subsystem Configuration Utility 
    Current audit system configuration: 
            ADTMODE = 0
            ADTERR  = 0 
            ADTPATH = /usr/informix/aaodir 
            ADTSIZE = 50000 
            Audit file = 0
            ADTROWS = 0
  5. 设置审计级别并开启审计功能。AAO 或者 DBSSO 配置系统中的审计级别。要开始审计所有会话,需输入 $ onaudit -l 1。以下是附加审计级别选项:
  • 0 = 禁用审计
  • 1 = 启用审计,审计所有会话
  • 3 = 启用审计,审计 DBSSO 操作
  • 5 = 启用审计,审计数据库服务器管理员操作
  • 7 = 启用审计,审计 DBSSO 及数据库服务器管理员操作

启用审计功能后,审计级别会记录到 online.log 中,并启动 adt VP,如 清单 23 所示。

清单 23. 记录审计级别
14:43:19 Dynamically added 1 adt VP
14:43:19 Audit Mode changed to 1 

54 4da833a8 0 1 IO Idle 9adt* adt vp 0

配置审计的附加选项

可为审计配置附加选项。

错误模式

如果向审计跟踪写入时发生错误,数据库服务器可执行以下两个功能之一:

  • Continue-error 模式
  • 具有两个严重级别的 halt-error 模式

设置可选行级别审计

清单 24 中的命令继续审计所有具有 AUDIT 标志的表,并停止审计所有其他表。

清单 24. 用于可选行级别审计的命令
$ onaudit -R 1 

Options: 
0 = Auditing row-level events on all tables (0 is the default value) 
1 = Selective row-level auditing is enabled for tables set with the AUDIT flag. 
2 = Selective row-level auditing is enabled for tables set with the AUDIT flag.

关闭审计功能

将审计级别设置为 0,即可停止审计功能,如 $ onaudit -l 0 所示。

使用 onshowaudit 工具

可利用 onshowaudit 工具来访问审计跟踪(或者审计文件)。可利用 $ onshowaudit 命令来为特定用户或服务器(或为二者)提取相关信息,这样就有可能将特定的数据子集从可能更大的审计跟踪中隔离。数据库服务器不会审计 onshowaudit 工具的执行。清单 25 展示了 onshowaudit 命令的执行结果。

清单 25. onshowaudit 工具的命令
ONSHOWAUDIT Secure Audit Utility
INFORMIX-SQL Version 11.70.FC4
ONLN|2011-10-06 15:28:25.000|fido|11647|abc1170tcp|informix
|0:RDRW:stores_demo:106:2097230:309::
Program Over.

路径选项 -f 指定审计文件的目录及文件名,如 清单 26 所示。

如果命令中忽略了 -f,则 onshowaudit 会在默认 ADTCFG 文件中所指定的 ADTPATH 目录中搜索审计文件。审计目录及文件名必须遵从最小安全级别。该目录必须属于组 AAO 的用户 informix,并且不允许公开访问权限(0770 权限)。文件必须具有可比较权限(0660 权限)。该文件不能符号链接到其他位置。目录可以是符号链接。如果审计目录及文件不安全,onshowaudit 工具将会返回错误消息,并不会展示审计结果。

清单 26. 显示审计日志 file /work/aaodir/ol_lx_rama.7 及其结果的命令
$ onshowaudit -I -f /work/aaodir/ol_lx_rama.7

ONSHOWAUDIT Secure Audit Utility
INFORMIX-SQL Version 11.70.FC4
ONLN|2011-10-06 15:28:25.000|fido|11647|abc1170tcp|informix
|0:RDRW:stores_demo:106:2097230:309:: 
Program Over.

清单 27 中的命令仅展示了审计日志文件 /work/aaodir/ol_lx_rama.7 中属于 usr1 的记录。

清单 27. 只展示 usr1 相关记录
onshowaudit -I -f /work/aaodir/ol_lx_rama.7 -u usr1

命令 onshowaudit 还可提供使用分隔符提取的数据,该数据可用于加载到数据库中,如 清单 28 所示。

清单 28. 使用分隔符及其结果展示 onshowaudit 的命令
$ onshowaudit -I -l -f /work/aaodir/ol_lx_rama.7 

ONSHOWAUDIT Secure Audit Utility 
INFORMIX-SQL Version 11.70.FC4 
ONLN|2011-10-06 15:28:25.000|fido|11647|abc1170tcp|informix|0|RDRW|stores_demo
|106|||2097230|309|||| 
Program Over.

使用自主访问控制

自主访问控制验证用户执行任何特定操作的特权。

管理特权

可通过如下步骤来定义默认角色并授予特权:

  1. 在当前数据库中选择一个已有角色作为默认角色,或者创建想要使用的角色作为默认角色。利用 CREATE ROLE 角色命名语句在当前数据库中创建新角色。
  2. 利用 GRANT 语句为角色授予特权。
  3. 将角色授予用户,并使用语法 GRANT DEFAULT ROLE rolename TO username 或者 GRANT DEFAULT ROLE rolename TO PUBLIC 将该角色设置为默认用户或 PUBLIC 角色。

利用 REVOKE DEFAULT ROLE 语句将默认角色与用户分离。

用户必须使用 SET ROLE DEFAULT 语句将任何其他当前角色更改为默认角色。

定义默认角色

作为管理员,可定义默认角色来给单个用户或者 PUBLIC 组分配特定数据库的角色。当用户与数据库建立连接后,会自动应用默认角色。每个用户都具有单独授予该用户的所有特权以及默认角色的特权。用户可利用 SET ROLE DEFAULT 语句从当前个人角色切换到默认角色。如果将不同默认角色分配给同一用户和 PUBLIC,用户的默认角色优先。如果未将默认角色分配给用户,则用户仅具有单独授予的特权和公共特权。

分离角色

角色分离可执行由运行并审计数据库服务器的个人分离的管理任务。如果未设置 INF_ROLE_SEP,那么用户 informix 可执行所有管理任务。将环境变量 INF_ROLE_SEP 设置为非零整数值,从而实现角色分离。

设置数据库创建权限

利用 DBCREATE_PERMISSION 配置参数,为指定用户授予创建数据库的权限,这样就能防止其他用户创建数据库。如果未设置 DBCREATE_PERMISSION 配置参数,则任何用户都能创建数据库。用户 informix 始终具有创建数据库的权限。完成以下步骤来设置数据库创建权限。

  • 向 onconfig 文件中添加 DBCREATE_PERMISSION informix,将数据库创建权限仅限于 informix 用户。
  • 选项包括利用 onconfig 文件中的 DBCREATE_PERMISSION 向其他用户授予数据库创建权限的多个实例。例如,要将权限授予用户 watson 和 jay,可在 onconfig 文件中添加 DBCREATE_PERMISSION watson, jay

结束语

本教程主要讲解 IBM Informix 数据库审计相关概念。介绍了在参加 Informix 系统管理认证考试之前需要了解的审计相关知识。对 Informix 审计权限有了更深入的了解后,还应作如下准备:

  • 了解身份验证、授权、以及加密相关概念与使用方法
  • 允许 non-OS 用户访问数据库
  • 利用 onaudit 在数据库服务器中设置并配置安全审计
  • 利用可信连接与可信上下文连接来提高安全性
  • 利用角色特权限来保护数据
  • 设置角色分离,来加强对数据库服务器用户的访问控制

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=830975
ArticleTitle=Informix 11.70 系统管理认证考试 919 准备教程,第 8 部分: 安全性
publish-date=08202012