级别: 初级 Kevin Yeung-Kuen See (see@ca.ibm.com), 软件开发人员, IBM Yung Chung (ychung@ca.ibm.com), 软件开发人员, IBM Henry Chan (henryc@ca.ibm.com), 软件开发人员, IBM
2006 年 4 月 10 日 使用用于认证的 Kerberos 为用户 ID(或主体)提供一个集中的存储库,从而可以集中化和简化主体或身份管理。学习如何为 DB2® Universal Database™ for Linux®, UNIX®, and Windows® (DB2 UDB) 设置一个 Kerberos 域环境以及如何配置 DB2 以便使用 Kerberos 认证。
简介
Kerberos 是市场上一种主要的单点登录(Single Sign-On)解决方案。它基于一种开放的标准。Kerberos 实际上是一种安全网络认证协议,采用共享密钥的系统,并且能提供健壮的安全性,以防止伪装攻击和恢复攻击。在 Kerberos 解决方案中,密码不会在线路中传输,服务器和客户机可以相互认证(请参阅 “相互认证”)。然而,这种解决方案依赖于一个受信任的第三方实体,即 Key Distribution Centre (KDC),它可以获得所有密钥。
使用 Kerberos 的另一大诱因是,它为用户 ID(或主体)提供一个集中的存储库,从而可以集中化和简化主体或身份管理。
在 DB2 UDB, 8.2 版之前,Kerberos 认证方法只在 ® Windows® 2000 平台上受支持,即通过 SSPI 接口使用 Microsoft 的本地 Kerberos 支持。在 DB2 UDB, 8.2 版中,加入了安全性插件基础设施的实现,用户现在可以在 Linux 和 UNIX 平台上通过使用 IBM 发布的 Kerberos 安全性插件库(IBMkrb5)来使用 Kerberos 认证方法。
学习如何在 Linux 和受支持的 Unix 平台上设置 Kerberos 环境。本文讨论如何在 NAS 客户机和 KDC(NAS 服务器)的系统上配置 NAS 工具包(IBM Kerberos 工具包 —— 惟一受 DB2 官方支持的 Kerberos 版本)。而且,本文还讨论如何设置 Microsoft Windows 环境以便使用 Kerberos authentication for DB2。然后,我们展示如何启用 DB2 Kerberos 认证。最后,我们讨论在设置 Kerberos 环境时可能遇到的一些常见问题。
本文假设您知道如何在 UNIX 和 Linux 系统上安装软件包,并且对 Windows 域控制器和活动目录有些基本的了解。在阅读本文之后,您应该能够为 DB2 设置单个 Kerberos 域环境并且配置 DB2 以便使用 Kerberos 认证。
Kerberos 概述
Kerberos 是一种第三方网络认证协议,采用共享密钥的系统安全地对不安全网络环境中的用户进行认证。Kerberos 使用一种三层系统,在这个三层系统中,应用服务器与客户机之间交换加密的票据(单独由一个名为 Kerberos 密钥分发中心,简称 KDC 的服务器提供),而不是交换文本形式的用户 ID-密码对。这些加密的服务票据(凭证)只有客户机和服务器能理解,因此安全风险极小,即使票据在网络中被拦截也没关系。
下面两个图说明了 Kerberos 的基本原理:
图 1. 步骤 1:获取票据授予票据
图 2. 步骤 2:获取会话票据并执行相互认证
在 KDC 中有两个服务和一个数据库。数据库中包含一个 principal 项,并且每个注册用户有一个相关的加密密钥。加密密钥来自用户在 KDC 注册时输入的密码。KDC 中的两个服务分别是认证服务(AS)和票据授予服务(TGS)。顾名思义,认证服务负责在给予用户初始凭证 —— 票据授予票据(TGT)—— 之前对用户进行认证。票据授予服务负责授予票据。在 Kerberos 认证期间,要执行以下八个步骤(最后两步只有在需要相互认证时才会执行):
-
客户机通过 UNIX 和 Linux 上的 kinit 程序向 Kerberos 认证服务(AS)认证自己,并登录到 Windows 上的一个域中,以便请求一个票据授予票据。
-
一旦客户机认证成功,AS 便将 TGT 返回给客户机。
-
有了 TGT 之后,客户机请求一个授予票据的服务(也就是会话密钥),以便访问服务器。
-
TGS 生成一个会话密钥,然后用客户机的私钥加密该密钥后将其发送给客户机。此外,KDC 用服务器的私钥加密该会话密钥以及关于客户机的一些信息后(合称票据)将其提供给客户机。
-
客户机用会话密钥加密一个认证器(authenticator),将其连同票据一起发送给服务器。
-
服务器解密票据,并提取出会话密钥。
-
如果受到请求,服务器将使用会话密钥解密认证器,从认证器中提取出时间戳,再用会话密钥加密时间戳,然后将其发送给客户机。这个加密令牌的返回将导致相互认证的开始。
-
客户机使用会话密钥解密收到的令牌,如果时间戳与认证器中的时间戳匹配,则认为相互认证获得成功。
在 UNIX/Linux 系统上配置 NAS 工具包的步骤
步骤 1:设置 KDC 服务器
本指南假设您在 KDC 服务器上使用的是 NAS Server工具包。
对于 AIX,可以从 AIX 5.2 安装盘的附带盘中获得 NAS Server 工具包。注意,这个 NAS Server 只能用于 AIX 平台。
表 1. 设置 NAS 服务器 - KDC 的步骤
| 1. | 从光盘安装 Network Authentication Service 1.3 服务器。 | | 2. | 使用以下命令配置 KDC 服务器:
/usr/krb5/sbin/config.krb5 -S -d domain -r realm
其中 realm 是要使用的域。
例如:
config.krb5 -S -d torolab.ibm.com -r DB2SEC3.TOROLAB.IBM.COM
config.krb5 在 /etc/krb5 下创建一个 krb5.conf 文件。
下面展示了一个 krb5.conf 文件示例:
[libdefaults]
default_realm = DB2SEC3.TOROLAB.IBM.COM
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc
default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc
[realms]
DB2SEC3.TOROLAB.IBM.COM = {
kdc = witch.torolab.ibm.com:88
admin_server = witch.torolab.ibm.com:749
default_domain = torolab.ibm.com
}
[domain_realm]
.torolab.ibm.com = DB2SEC3.TOROLAB.IBM.COM
witch.torolab.ibm.com = DB2SEC3.TOROLAB.IBM.COM
[logging]
kdc = FILE:/var/krb5/log/krb5kdc.log
admin_server = FILE:/var/krb5/log/kadmin.log
default = FILE:/var/krb5/log/krb5lib.log
| | 3. | 发出以下命令启动 KDC 服务器:
/usr/krb5/sbin/start.krb5
应该可以看到两个正在运行的守护进程 kadmind 和 krb5krbc:
root 1183858 1 0 21:42:34 - 0:00 /usr/krb5/sbin/kadmind
root 1974404 1 0 21:42:34 - 0:00 /usr/krb5/sbin/krb5kdc
|
步骤 2:设置 NAS 客户机
注意: DB2 提供的 IBMKrb5 安全插件只支持 NAS 客户机。
表 2. 设置 NAS 客户机的步骤
| Linux | AIX | Solaris |
|---|
| 1. 下载和安装 NAS 客户机包 | DB2 要求带 1.4 或更高版本的 IBM Network Authentication Service (NAS) 的 Red 7 Hat Enterprise Linux Advanced Server 3 (仅指 Intel 32 位)。参考资料 中有下载 NAS 客户机的链接。 | 从 AIX 5.2 安装盘的附带盘可以获得 NAS 客户机工具包。 | DB2 要求带 1.3 或更高版本的 IBM Network Authentication Service (NAS) 的 Solaris Operating Environment 8。参考资料 中有下载 NAS 客户机的链接。 | | 2. 设置 krb5 配置文件 | 发出以下命令来设置客户机:
/usr/krb5/sbin/config.krb5 -C -r realm -d domain -c KDC -s kadmin_server
例如:
/usr/krb5/sbin/config.krb5 -C -r DB2SEC3.TOROLAB.IBM.COM -d torolab.ibm.com -c witch.torolab.ibm.com -s witch.torolab.ibm.com
其中 witch.torolab.ibm.com 是在 AIX 上运行的 KDC 服务器。
config.krb5 在 /etc/krb5/ 下创建 krb5.conf 配置文件。
下面是一个示例配置文件:
[libdefaults]
default_realm = DB2SEC3.TOROLAB.IBM.COM
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc
default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc
[realms]
DB2SEC3.TOROLAB.IBM.COM = {
kdc = witch.torolab.ibm.com:88
admin_server = witch.torolab.ibm.com:749
default_domain = torolab.ibm.com
}
[domain_realm]
.torolab.ibm.com = DB2SEC3.TOROLAB.IBM.COM
witch.torolab.ibm.com = DB2SEC3.TOROLAB.IBM.COM
[logging]
kdc = FILE:/var/krb5/log/krb5kdc.log
admin_server = FILE:/var/krb5/log/kadmin.log
default = FILE:/var/krb5/log/krb5lib.log
| Solaris NAS 没有附带 config.krb5 可执行文件。因此,需要手动地在 /etc/krb5/krb5.conf 中编辑配置文件。请确认编辑的文件是 /etc/krb5/krb5.conf,而不是 /etc/krb5.conf。还必须添加默认的域(domain_realm 等)到该文件中。
Solaris 仅支持 Single DES。请务必修改 NAS 客户机和 NAS 服务器上的 krb5 配置,以便将这一点考虑进去。
|
步骤 3:在 KDC 中创建服务器主体(服务主体)
为了使用 NAS,务必将 /usr/krb5/bin and /usr/krb5/sbin 添加到环境的 PATH 中,并且放在系统中所有其他 Kerberos 之前。在安装 Red Hat Linux 时,您可能已经安装了其他 Kerberos 软件。
表 3. 创建服务器主体的步骤
| 1. | 在 DB2 服务器所在的机器上发出命令 /usr/krb5/sbin/kadmin,以启动使用 admin 主体的 kadmin 会话。
例如:
/usr/krb5/sbin/kadmin -p admin/admin -s witch.torolab.ibm.com
输出:
Authenticating as principal admin/admin with password.
Password for admin/admin@DB2SEC3.TOROLAB.IBM.COM: ********
kadmin>
| | 2. | 在 kadmin 提示符下发出:addprinc principal_name
例如:
kadmin> addprinc db2inst1/spline.torolab.ibm.com
DB2 UDB 实例的服务器主体名假设为 <instance name>/<fully qualified hostname>@REALM。这个主体名必须能够接受 Kerberos 安全上下文,并且在初始化阶段由插件将服务器名报告给 DB2 UDB 之后,在启动 DB2 UDB 实例之前,这个主体必须存在。
| | 3. |
在 keytab 文件中为服务器主体创建一项。您需要在 DB2 服务器所在机器上以 root 身份来运行 kadmin。否则,就需要将 keytab 文件复制到 DB2 服务器所在机器上。
在 kadmin 提示符下,发出:
ktadd server_principals
例如:
kadmin: ktadd db2inst1/spline.torolab.ibm.com
输出:
Entry for principal db2inst1/spline.torolab.ibm.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/krb5.keytab.
Entry for principal db2inst1/spline.torolab.ibm.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
Entry for principal db2inst1/spline.torolab.ibm.com with kvno 3, encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab.
Entry for principal db2inst1/spline.torolab.ibm.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
默认的 keytab 文件在 /etc/kerb5/krb5.keytab 位置,只有 root 用户才能读取它。您必须更改这个文件的权限,使 DB2 实例 ID 能够访问它。如果要更改 keytab 文件的位置,可以使用 NAS 环境变量 KRB5_KTNAME 并将 KRB5_KTNAME 添加到 db2envlist 注册表变量。
|
步骤 4:创建 Kerberos 用户(客户机主体)
主体可以由两部分组成,也可以由多个部分组成(也就是 name@REALM 或 name/instance@REALM)。由于 "name" 部分将在授权 ID (AUTHID) 映射中用到,因此这个名称必须遵从 DB2 数据库命名规则。这意味着这个名称最长只能是 30 个字符,并且使用的各个字符必须符合一定的限制。
使用 kadmin 下的 addprinc 创建用户主体。
例如:
kadmin: addprinc boss/db2inst
步骤 5:设置 DB2 以便使用 Kerberos 认证
关于如何设置 DB2 以便使用 Kerberos 认证,请参阅 “配置 DB2 以便启用 Kerberos 认证” 小节。
步骤 6:为 DB2 客户机和服务器向 KDC 认证身份
为了启动 DB2,登录到 DB2 服务器所在机器并发出 kinit 命令,以获得实例 ID 的票据,然后发出 db2start。
例如:
kinit db2inst1/db2inst1
db2start
为了连接到 DB2 服务器,必须使用用户主体作为用户名。例如:db2 connect to sample user boss/db2inst using password
或者,也可以在获得凭证之前首先发出 kinit。然后不必使用密码就可以连接到 DB2。
例如:
kinit boss/db2inst1
db2 connect to sample
配置 Windows 客户机和域控制器以便启用 Windows 本地 Kerberos 环境的步骤
在 Windows 2000 及更高版本上设置 DB2 客户机和服务器以便使用 Kerberos 是件非常简单的事。所有域用户相当于 Kerberos 主体,而活动目录则充当 KDC 的角色。
步骤 1:设置 KDC
基本上,您需要将 Windows 2000 及更高版本的服务器设置为启用了活动目录的域控制器。将 Windows 服务器升级为域控制器的命令是 dcpromo。更多细节请参阅 参考资料中的 “How to promote and demote domain controllers in Windows 2000”。
需求:
- 启用了活动目录的 Windows 2000 Server Edition 或 Windows 2003 Server Edition
设置:
- 启用活动目录
- 建议域名为大写形式,以便与非 Windows Kerberos 兼容
步骤 2:配置 Kerberos 配置文件
Microsoft 活动目录使用 DNS 来进行 Kerberos 名称映射,因此不需要配置文件。
步骤 3:在 KDC 中创建 Kerberos 用户(客户机主体)和服务器主体(服务主体)
为了在活动目录中添加用户主体和服务主体,可使用 Active Directory Server 机器上的 GUI 工具。单击 Manage user accounts and group settings 弹出 “Active Directory Users and Computers” 菜单屏幕。然后,右键单击 Users 文件夹并创建一个新的用户,例如 “see”。接下来,再为服务主体创建另一个用户,例如 “db2serv”。
步骤 4:设置服务器密钥表(keytab)文件
DB2 在 Windows 上不使用 keytab 文件。系统自动处理服务主体的凭证句柄的存储和获取。
步骤 5:设置 DB2 以便使用 Kerberos 认证
关于如何设置 DB2 以便使用 Kerberos 认证,请参阅 “配置 DB2 以便启用 Kerberos 认证的步骤” 小节。
步骤 6:为 DB2 客户机和服务器向 KDC 认证身份
为了向 Active Directory KDC 认证身份,只需登录到域上。
需求:
- Windows 2000 或更高版本的工作站,作为 Windows 2000 或更高版本的域的一部分
设置:
- 确认您的机器是域中的成员。以域用户的身份登录到该机器上。
- 在服务器上,以域用户的身份启动 DB2 服务。如果客户机和服务器都是在 Windows 机器上,并且属于同一个域,那么可以用 SYSTEM 帐户启动 DB2 服务。
继续这个例子,使用域帐户 “see” 登录到 DB2 客户机所在机器上,使用域帐户 “db2serv” 登录到 DB2 服务器所在机器上。然后,使用域帐户通过以下步骤在 DB2 服务器上启动 DB2 服务:
- 进入 Control panel > administrative tools > services
- 右键单击 DB2 - <instance name> service,然后进入 properties,并选择 Logon tab。确保指定的是域用户,而不是 Local System Account。
配置 DB2 以便启用 Kerberos 的步骤
DB2 为了处理诸如 Kerberos 之类安全插件而引入了很多新的数据库管理器配置参数。关于这些新参数的介绍可以在 DB2 文档中或者在 “Understand the DB2 Universal Database security plug-ins”(developerWorks,2005 年 12 月)一文中找到。
表 4. 在 DB2 中启用 Kerberos 认证的步骤
| 客户机上的步骤 | 服务器上的步骤 |
|---|
| 1. | 用 Kerberos 插件的名称(IBMkrb5)更新数据库管理器配置参数。
- 在 Windows 平台上,默认情况下就是这样的设置,因为 Kerberos 受底层操作系统的本地支持。
- 如果该参数的值保持为空白,则 DB2 认为客户机不能使用 Kerberos。
- DB2 提供的默认 Kerberos 插件被命名为 IBMkrb5。
- 对于支持 Kerberos 的平台,IBMkrb5 库已经存在于客户机插件目录中。
| 或者用服务器 Kerberos 插件名(IBMkrb5)更新数据库管理器配置参数 SRVCON_GSSPLUGIN_LIST,或者任由该项保持为空白。 | | 2. | 可选:对数据库进行编目意味着客户机将使用 Kerberos 插件进行认证。例如,db2 catalog db testdb at node testnode authentication kerberos target principal service/host@REALM。
| 将数据库管理器配置参数 SRVCON_AUTH 更新为 KERBEROS 或 KRB_SERVER_ENCRYPT。
或者
将数据库管理器配置参数 SRVCON_AUTH 更新为 NOT_SPECIFIED 并且将 AUTHENTICATION 设置为 KERBEROS 或 KRB_SERVER_ENCRYPT。 |
IBMkrb5 库可以在以下位置找到:
- 32 位 UNIX/Linux - sqllib/security32/IBM/client and sqllib/security32/IBM/server
- 64 位 UNIX/Linux - sqllib/security64/IBM/client and sqllib/security64/IBM/server
- 32 位和 64 位 Windows - sqllib\security\IBM\client and sqllib\security\IBM\server
注意,64 位 Windows 上的库被命名为 IBMkrb564.dll。
授权 ID 映射
授权 ID(authid)来自主体名的第一部分。例如:see/admin@db2sec.torolab.ibm.com 的授权 ID 是 SEE。因此,主体的第一部分充当一个用户 ID,因此必须遵从 DB2 中用户 ID 的命名惯例:
- 表示数据库管理器对象名称的字符串可以包含以下字符: a-z、A-Z、0-9、@、# 和 $。
- 在受安全插件支持的情况下,用户 ID 和组还可以包含以下附加的字符:_、!、%、(、)、{、}、-、.、^。
- 在通过命令行处理器输入用户 ID 和组时,包含以下任何字符的用户 ID 和组都必须以引号定界:!、%、(、)、{、}、-、.、^。
- 字符串中的第一个字符必须是字母字符、@、# 或 $,而不能是数字或字母序列 SYS、DBM 或 IBM。
- 认证 ID 在 32 位 Windows 上不能超过 30 个字符,在所有其他操作系统上不能超过 8 个字符。
- 组 ID 长度不能超过 30 个字符。
在 Windows 平台上,IBMkrb5 假设 "@" 字符是域分隔符。因此 "@" 不能用作用户名的一部分。
主体名有以下两种格式:name@REALM 或 name/instance@REALM。由于主体名的第一部分要用于派生授权 ID,因此来自不同 Kerberos 域的两个主体名可能被映射到相同的授权 ID。例如,see/admin@db2sec.torolab.ibm.com 和 see/admin@krb5.torolab.ibm.com 将被映射到相同的授权 ID SEE。来自相同名称但是不同实例的两个主体名也可能被映射到相同的授权 ID。例如, see/admin@db2sec.torolab.ibm.com 和 see/project@db2sec.torolab.ibm.com 将被映射到相同的授权 ID SEE。
因此,建议在所有受信任的域中使用惟一的名称空间,即所有具有相同名称(主体名的第一部分)的主体,不管域或实例是什么,都应该属于相同的用户。
将 Kerberos 用于 DB2 认证时的限制和缺点
如果初始的凭证到期,DB2 不会自动为它们延期。然而,在 Microsoft Windows 平台上,凭证的延期是由操作系统自动完成的。
除非使用定制的插件来处理组成员查找,否则,对于每个使用 DB2 的主体,都必须创建对应的操作系统帐户。
目前,DB2 没有为 Kerberos 实现对凭证委托和在连接语句上更改密码的支持。
Kerberos 本身也有一系列的缺点:
- Kerberos 不能防止密码猜测攻击。
- 不能防止拒绝服务攻击。
- 组或访问控制列表(ACL)的概念不是 Kerberos 协议规范的一部分。
- 每个主体必须长期妥善保管私钥。否则,得到密钥的攻击者完全可以伪装成主体。
- 完全信赖和信任必须以 KDC 为基础。
- 如果 KDC 受到危害,那么整个域都将变得不安全。因此,保证 KDC 的安全至关重要。
- Kerberos 假设域中所有机器的锁在允许的时间相位限制内是紧密同步的。
- 密钥临时存储在用户工作站上,可能成为攻击的目标。
- 会话密钥是在用户工作站上(缓存或密钥表)解密和存放的,可能成为攻击目标。
客户可能遇到的常见问题
问题 1:(Linux 或 UNIX 平台)
| 问题描述 |
|---|
发出 db2start 后返回以下错误:
09/01/2004 09:32:16 0 0 SQL1365N db2start or db2stop failed in processing the plugin "". Reason code = "10".
SQL1032N No start database manager command was issued. SQLSTATE=57019
这个错误出现在 db2diag.log 中:
FUNCTION: DB2 Common, Security, Users and Groups, secLoadServerGSSPlugin, probe:21
DATA #1 : String, 95 bytes
gss_acquire_cred: Miscellaneous failure. A file or directory in the path name does not exist.
但是在发出 kinit 之后,db2start 却运行正常。
| | 解决方案或变通办法: |
这个错误是在服务器插件初始化的时候发生的,它表明 NAS 客户机不能找到 keytab 文件。如果没有设置 KRB5_KTNAME 环境变量,那么 NAS 客户机认为 keytab 文件是 /etc/krb5/krb5.keytab。为了让服务器接受 Kerberos 凭证,服务器主体的凭证必须存储在默认的 keytab 文件中。
对于使用 Windows 的客户,使用 Windows 活动目录作为 KDC,生成服务密钥并将它添加到 keytab 文件的步骤需要一些额外的工作。关于 Microsoft Kerberos 5(krb5 1.0)互操作性的逐步指南的详细信息,请访问 参考资料 中的相关链接。
|
问题 2:(Linux 或 UNIX 平台)
| 问题描述 |
|---|
db2diag.log 文件包含以下各项:
FUNCTION: DB2 Common, Security, Users and Groups, secLoadServerGSSPlugin, probe:21
DATA #1 : String, 86 bytes
gss_acquire_cred: Miscellaneous failure. No principal in keytab matches desired name
| | 解决方案或变通办法: |
确保 keytab 文件在正确的位置,与第一个问题的解决方案类似。然后使用 klist -k 确认主体是否在 keytab 中。如果主体不在列表中,那么使用 ktadd -k 命令正确地添加主体。确保主体名符合 “授权 ID 映射” 小节中列出的格式。
|
问题 3:(Linux 或 UNIX 平台)
| 问题描述 |
|---|
在版本低于 V8 Fix pack 12,并且在 Linux 或 UNIX 平台上使用 IBM 发布的 Kerberos 插件的情况下,只有实例所有者(不管使用何种凭证,即不管是服务用户还是 admin 用户)发出的启动和停止数据库管理器的命令(例如 db2start 或 db2stop)才能正常工作。管理日志文件中有以下各项:
ADM13001E Plug-in "IBMkrb5" received error code "-1" from the DB2 security plug-in API "db2secGetDefaultLoginContext" with the error message "gss_acquire_cred: Miscellaneous failure. Credentials cache permissions incorrect".
| | 解决方案或变通办法: |
失败的原因是 db2start 或 db2stop 被设置成以实例所有者身份运行(setuid)。因此,db2start 进程将以实例所有者的身份运行。在 db2start 期间,它将试图访问凭证缓存文件。凭证缓存文件是发出 kinit 的用户 ID 所拥有的。因此 db2start 会导致 "credentials cache permissions incorrect" 错误,因为实例所有者不能访问该文件。
变通办法是更改缓存文件的权限,使得在 SYSADM 执行 kinit 命令之后实例所有者可以访问该文件。
发出 klist 命令,找到缓存文件的位置。例如:
spline: /export/home/newton>klist
Ticket cache: /tmp/krb5cc_1943
|
问题 4:(所有平台)
| 问题描述 |
|---|
一个远程客户机在没有指定认证 Kerberos 的情况下编目了一个数据库,但是数据库管理器配置参数 "authentication" 或 "srvcon_auth" 被设置为 krb_server_encrypt(也就是 Kerberos 服务器加密)。当用户尝试在指定用户 ID 和密码(KDC 的用户 ID 和密码)的情况下,从打算使用 Kerberos 认证的远程客户机连接到一个数据库时,连接遭到失败,并得到 sqlcode -30082 reason code 24 (USERNAME AND/OR PASSWORD INVALID)。
| | 解决方案或变通办法: |
将数据库管理器配置参数 "authentication" 或 "srvcon_auth" 设置成 krb_server_encrypt 意味着数据库服务器可以接受 server_encrypt 或 kerberos 作为认证方法。这种失败是因为远程客户机尝试使用用户 ID 和密码进行连接,如果没有用特定的认证类型编目数据库的话,默认情况下 DB2 客户机将向服务器发出使用 server_encrypt 认证方法的请求。在这种情况下,由于服务器实际上接受 server_encrypt 认证方法,因此它将认为客户机发送了要由数据库服务器的操作系统验证的用户 ID 和密码。如果在数据库服务器的底层操作系统上没有定义这个用户 ID 和密码,那么这将导致未预料到的失败。解决方案是在客户机上的数据库别名中显式地编目认证类型(KERBEROS)
|
问题 5:(Windows 平台)
| 问题描述 |
|---|
在 Windows 平台上,连接失败,并收到 sqlcode -30082 和 reason code 6。db2diag.log 或管理日志(Windows 事件日志)指出 "Logon failed" 或 "Logon denied"。
| | 解决方案或变通办法: |
检查以下情况:
- 帐户到期
- 密码无效
- 密码到期
- 管理员强制改变密码
- 帐户被禁用
|
问题 6:(Windows 平台)
| 问题描述 |
|---|
在 Windows 平台上,连接失败。在 db2diag.log 或管理日志(Windows 事件日志)中指出 "The Local Security Authority cannot be contacted"。
| | 解决方案或变通办法: |
检查本地是否定义了域帐户名。如果定义了,那么在连接字符串中使用全限定用户名,例如 see@TOROLAB.IBM.COM。
|
问题 7:(Windows 平台)
| 问题描述 |
|---|
在 Windows 平台上,连接失败。在 db2diag.log 或管理日志(Windows 事件日志)中指出使用了无效的目标主体名。
| | 解决方案或变通办法: |
这可能是由于客户机和服务器所在机器处在不同的域中,而且又是在本地系统帐户下启动的。如果确实如此,那么变通的办法是:
- 使用全限定服务器主机和域名(例如 host/myhost.domain.ibm.com@DOMAIN.IBM.COM)显式地编目目标主体名
- 在有效的域帐户下启动 DB2 服务
|
结束语
本文对 Kerberos 认证方法作了一个概述。Kerberos 是 IT 界一种主要的单点登录解决方案,它为用户 ID(或主体)提供了一个集中的存储库,从而可以集中化和简化主体或身份管理。在本文中,您学习了如何在所有受支持的平台上设置 Kerberos 环境,以及如何在 DB2 中启用 Kerberos。您还学习了将 Kerberos 用于 DB2 认证的一些限制和缺点,以及在为 DB2 设置 Kerberos 环境时经常遇到的一些错误。
参考资料 学习
获得产品和技术
讨论
作者简介  | 
|  | Kevin See 是 CISSP,在过去十年一直是 IBM 多伦多实验室的一名专职软件开发人员。他曾在 DB2 Security Development 小组和 DB2 SQL and Catalog Development 小组工作。他是 IBM 认证的 XML 及相关技术解决方案开发人员,同时也是 DB2 认证的解决方案专家(DBA for OS/390、DBA for Linux/Unix/Windows 和 DB2 Family Application Development)。他还是 ISC2 认证的信息系统安全专家。他撰写了两篇 IBM Developer Works 安全性方面的文章,并且正在与人合作撰写一本关于 DB2 安全性方面的书。
|
 | |  | Yung Chung 是 IBM 多伦多实验室的一名软件开发人员,在 DB2 Continuing Engineering 小组工作。在此之前,他曾在 DB2 UNIX Development 小组工作。Yung 拥有约克大学科学学士学位,并且是 IBM 认证的解决方案专家(DBA for Linux/UNIX/Windows)。 |
 | |  | Henry Chan 是 IBM 多伦多实验室的一名软件开发人员,在 DB2 Continuing Engineering 小组工作。在此之前,他曾在 DB2 Security Development 小组和 DB2 Relational Database Services 小组工作,已经在 IBM 工作 10 年了。他拥有阿尔伯塔大学科学硕士学位和滑铁卢大学数学学士学位。他是 IBM 认证的解决方案专家(DBA for Linux/Unix/Windows 和 DB2 Family Application Development)。 |
对本文的评价
|