使用 AIX 加密文件系统 (EFS) 来进行数据库加密

如果要在 AIX® 操作系统上运行 Db2® 系统,那么可以选择使用 AIX 加密文件系统 (EFS) 来设置加密数据库。 有关 EFS的详细信息,请参阅 AIX 文档。

注: 如果您正在 分区数据库环境中工作,那么要使用 EFS,您的数据库应该位于单个数据库分区中。

通过将底层的 EFS 与 JFS2 文件系统配合使用,可以对包含数据库表中数据的操作系统文件进行加密。

设置加密的步骤如下所示:
  1. 在系统上启用 EFS。
  2. 为用来运行 DB2 数据库守护程序的用户帐户装入密钥库。
  3. 在数据库文件系统上启用 EFS。
  4. 确定要加密的操作系统文件。
  5. 对包含需要 EFS 保护的数据库表的文件进行加密。

在系统上启用 EFS

在启用 EFS 之前,必须安装 clic.rte 文件集。 可在扩展包 CD 上找到 clic.rte 安装映像。

以 root 用户身份运行下面的命令来在系统上启用 EFS:
% efsenable -a

仅需要运行 efsenable 命令一次。

装入密钥库

在下列配置示例中,用来运行 DB2 数据库守护程序的用户帐户称为 abst。 用户 abst 必须具有密钥库,并且 abst 所属的任何组也必须具有密钥库。
  1. 在启动 DB2 守护程序之前,所有密钥库都必须与 abst 进程相关联。
    可以通过使用 efskeymgr -V 命令来验证它们是否相关联,如以下示例所示:
    # lsuser abst
    abst id=203 pgrp=abstgp groups=abstgp,staff ...
    
    # efskeymgr -V
    List of keys loaded in the current process:
      Key #0:
                        Kind ..................... User key
                        Id (uid / gid) ......... 203
                        Type ..................... Private
    key
                        Algorithm ................ RSA_1024
                        Validity ................. Key is
    valid
                        Fingerprint ..............
    24c88df2:d91cb6a2:c3e11b6a:4c13f8b4:666fabd8
    
      Key #1:
                        Kind ..................... Group
    key
                        Id (uid / gid) ......... 1
                        Type ..................... Private
    key
                        Algorithm ................ RSA_1024
                        Validity ................. Key is
    valid
                        Fingerprint ..............
    03fead42:57e7646e:a1715626:cfa56c8e:8abed1c1
    
      Key #2:
                        Kind ..................... Group
    key
                        Id (uid / gid) ......... 212
                        Type ..................... Private
    key
                        Algorithm ................ RSA_1024
                        Validity ................. Key is
    valid
                        Fingerprint ..............
    339dfb19:bc850f4c:5551c975:7fe4961b:2dddf3bc
  2. 如果没有任何密钥库显示为与 abst 进程相关联,那么尝试使用以下命令来装入密钥库:% efskeymgr -o ksh

    此命令会提示用户提供密钥库密码,该密码最初设置为登录密码。

  3. 通过重新运行以下命令来确认已装入用户和组密钥: % efskeymgr -V

    应该会列示用户和组密钥。 如果仍然没有列示组密钥库,请继续执行步骤 4。

  4. 根据创建组的方式的不同,组密钥库可能不存在。 如果 efskeymgr -V 命令没有列示用户的组密钥库,那么必须创建组密钥库。
    请以 root 用户或 RBAC 角色 aix.efs_admin 身份创建组密钥库:
    % efskeymgr -C group_name
  5. 将组密钥库访问权指定给每个合适的用户:
    % efskeymgr -k group /group_name -s user/user_name

    如果用户已登录,那么他们将不会立即对组密钥库具有访问权,他们应该使用 efskeymgr -o ksh 命令来重新装入其密钥库,或者重新登录。

在数据库文件系统上启用 EFS

EFS 仅在 JFS2 文件系统上运行,且必须专门启用。

如果数据库位于现有文件系统上,请运行 % chfs -a efs=yes filesystem 命令来启用 EFS,例如:
% chfs -a efs=yes /test01
如果要创建新的文件系统,可以使用带有 -a efs=yes 选项的 smit 命令或 crfs 命令来启用 EFS 。 例如:
% crfs -v jfs2 -a efs=yes -m mount_point -d device -A yes

现在,EFS 在文件系统上已启用但未打开。 仅对需要加密数据的特定数据库表开启 EFS (有关更多信息,请参阅有关 efsmgr 命令和继承的 AIX EFS 文档)。

确定要加密的文件

为了确定包含要使用 EFS 加密来保护的特定数据库表的文件,请遵循将 EMPLOYEE 表用作示例的这些步骤。

  1. 使用类似于以下示例的查询来查找表的 TBSPACEID:
    SELECT TABNAME, TBSPACEID FROM syscat.tables WHERE tabname='EMPLOYEE'
    假定此查询的结果如下所示:
    TABNAME TBSPACEID
    EMPLOYEE 2
  2. 使用类似于下面的示例的查询来在表空间中查找该 TBSPACEID:
    LIST TABLESPACE CONTAINERS FOR 2
    假定此查询的结果如下所示:
    容器标识 名称 类型
    0 /test01/abst/NODE0000/BAR/T0000002/C0000000.LRG 文件

    现在,您知道此表空间包含在称为 /test01/abst/NODE0000/BAR/T0000002/C0000000.LRG 的操作系统文件中。 这是需要加密的文件。

加密文件

首先,请按对数据或数据库进行任何重大更改之前的操作来备份数据库。

遵循下列步骤以加密文件:

  1. 列示文件,例如:
    # ls -U /test01/abst/NODE0000/BAR/T0000002/C0000000.LRG
    
    -rw-------- 1 abst abstgp 33554432 Jul 30 18:01
    /test01/abst/NODE0000/BAR/T0000002/C0000000.LRG
  2. 使用 efsmgr 命令来对文件进行加密,例如:
    # efsmgr -e /test01/abst/NODE0000/BAR/T0000002/C0000000.LRG
    如果您再次列出该文件,那么将在许可权字符串末尾看到 e(指示该文件已加密)。 例如:
    # ls -U /test01/abst/NODE0000/BAR/T0000002/C0000000.LRG
    
    -rw-------e 1 abst abstgp 33554432 Jul 30 18:03
    /test01/abst/NODE0000/BAR/T0000002/C0000000.LRG
  3. 按正常方式启动并使用 DB2 数据库管理器。 在底层文件系统中,添加至 EMPLOYEE 表和此加密表空间的所有数据都将由 EFS 进行加密。 每当检索到数据时,都将通过 DB2 数据库管理器按正常方式解密并显示该数据。