我有一个在 Windows 2003 上运行的 ASP.NET 应用程序,需要与驻留在主机上的 DB2 数据库进行通信。我们在服务器上安装了 DB2 Client 驱动程序 v9.5,以便应用程序可以执行连接并使用数据库。连接到数据库的连接字符串包含用户名和密码,这不是可信连接。
需要明确的是,我们使用的是 DB2 .NET 提供程序,而不是 OLE DB、ODBC 等。
我们注意到,当 ASP.NET 应用程序尝试与 DB2 建立首次连接时,需要花费很长时间,大约 20 秒。在与我们的一位常驻 DBA 交谈后,他们说这可能是因为 DB2 驱动程序正在尝试根据 Active Directory 对用于连接数据库的用户帐户进行身份验证。
他们的解决方案是在 Win2003 服务器上创建一个本地用户帐户,其名称与用于建立连接的用户帐户相同。本地用户帐户不必是任何 acl 组的成员,并且可以禁用它。
我尝试了这个解决方案,令我惊讶的是,它居然真的有效。连接在几毫秒内就完成了。我担心的是,这个“功能”似乎是 DB2 驱动程序的一个缺陷,并且该驱动程序的任何新版本实际上都可能阻止它再次工作。
有谁知道 DB2 驱动程序中是否有我们可以设置的实际设置,以便它不会尝试使用 Active Directory 进行身份验证?我更愿意使用该设置,而不是依赖于在我看来的身份验证算法中的缺陷。
谢谢
答案1
在 db2 客户端配置设置中,有用于身份验证的服务器选项。选项的描述令人困惑。默认为“使用服务器 dbm 配置中的身份验证定义”。在客户端上,“服务器 dbm 配置”实际上是指本地计算机。如果您的本地计算机是 Microsoft Windows,则连接将尝试使用默认身份验证方法对 ID 进行身份验证。如果默认为 Active Directory,则速度可能会变得非常慢。一旦它从 Windows 获得返回(好或坏),它就会尝试使用 id/passwd 连接到 db2。这就是为什么您的 DBA 说要使用“使用服务器身份验证”对连接进行分类。mix 中也有一个错误。如果您使用 odbc,它可能会尝试转到域控制器,并且要修复该问题,需要本地 ID。
答案2
我们的 DBA 刚刚找到了适当的解决方案,无需添加本地用户即可工作。
基本上,这与您在 DB2 应用程序服务器上编录连接有关,您必须指定类似“身份验证服务器”的内容。这可防止 DB2 驱动程序针对 Active Directory 进行身份验证。
我知道答案很模糊,但这是我能从他那里得到的最多的答案。