Windows 2008 x64下ODBC SQL驱动锁定为单用户

ODBC SQL Driver Locked to Single User On Windows 2008 x64

本文关键字:单用户 用户 锁定 x64 2008 ODBC SQL Windows      更新时间:2023-10-16

我有两个不同的c++ ISAPI dll,它们已经设置并配置为IIS 7用作web应用程序。它们使用在不同域用户帐户下运行的不同应用程序池进行设置。我遇到的问题是,一旦其中一个应用程序连接到SQL,另一个应用程序就不能。应用程序尝试建立连接的方式在代码上没有区别——它们都使用相同的参数调用相同的静态库方法。让第二个应用程序连接到SQL的唯一方法是将其应用程序池用户设置为与第一个应用程序相同的域用户,反之亦然(这就排除了一个用户权限不足的情况)。我已经仔细检查了是否为SQL Driver打开了ODBC连接池,并且监视了ODBC数据源管理员跟踪日志。如果我在两个应用程序池在不同用户下运行时监视跟踪日志,那么在trace中,对于enter和exit, SQLAllocHandle都显示成功,但是对于调用它的第一个应用程序,SQLDriverConnect仅在enter和exit时显示成功。当第二个应用程序用完全相同的参数调用SQLDriverConnect时,跟踪只显示enter,调试日志也表明该函数调用永远不会返回。数据包跟踪表明,第二个应用程序甚至从未尝试连接到SQL服务器。但是,第一个应用程序将连接良好,并且在SQL中运行分析器将显示SQL语句的正确执行。这些应用程序在IIS 6和旧版本的ODBC驱动程序下的Windows 2003 x86上使用相同的多用户配置运行得很好。

我希望有一个简单的ODBC设置,我错过了,但我的搜索是空的。任何人能提供的任何帮助都将不胜感激,提前感谢。

经过一周多的故障排除和与微软的讨论,我们终于找到了解决方案。微软告诉我们,在2003年到2008年之间,他们改变了进程之间的交互方式,使用我们的静态链接库,就像我们在不同用户下运行时那样,会导致锁定问题。当我们在调用ODBC连接器之前引入一个新线程时,一切正常。

相关文章: