0

我正在尝试在我的本地计算机上设置一个用 ASP Classic 编写的旧站点。我正在使用 SQL Server 2008 和 IIS 7.5 版。

当我尝试打开与数据库的连接时遇到错误。

我使用了这篇文章中的建议

使用 .udl 文件来创建和测试我的连接字符串,以便我知道连接字符串有效。我正在使用 Windows 身份验证,并且我确定运行此站点的应用程序池可以访问数据库,因为我为多个站点使用同一个池并且它们都可以正常连接。

打开连接时,我试图运行存储过程,如果我只是写出存储过程字符串并直接在我的数据库中运行它,它会按预期工作。

这是代码:

Const adUseClient = 3
Const adCmdStoredProc = 4
Const adOpenStatic = 3
Const adLockBatchOptimistic = 4

dim connectstring,sql
connectstring = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=my-database;Data Source=(local)\SQLEXPRESS"
sql = "MyProc '" & param1 & "','" & param2 & "'"
set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockBatchOptimistic
' this is where it is failing
rs.Open sql, connectstring, 3

问题之一是我得到的错误似乎是由 IIS 生成的,它只是说:

处理 URL 时服务器发生错误。请联系系统管理员。

如果您是系统管理员,请单击此处了解有关此错误的更多信息。

当我单击“单击此处”链接时,它会将我带到有关在 IIS 7 上运行 ASP Classic 站点的常规页面,但我找不到任何与我的错误相关的内容。我似乎无法找到从哪里获取有关该错误的信息。作为最后的手段,我检查了事件查看器-> Windows 应用程序日志,但没有条目记录我的错误。

我已经用谷歌搜索并尝试了连接字符串的多种排列,但无济于事。如果有人对如何解决这个问题有任何建议,或者甚至知道在哪里寻找解决方案,我将不胜感激。非常感谢!

**编辑: **

好的,我更改了 IIS 设置以在浏览器中显示错误,现在我收到一条更有用的错误消息,它是:

用于 SQL Server 错误“80004005”的 Microsoft OLE DB 提供程序

无法打开登录请求的数据库“rw-gp”。登录失败。

现在,当我用 Google 搜索时,我发现这通常是权限问题。如您所见,我正在使用 Windows 身份验证,并且在有权连接到数据库的应用程序池下运行该站点。我在本地设置了多个在此应用程序池中运行的 ASP.NET 站点,它们可以使用集成安全性进行连接。我不确定出了什么问题,有人有什么建议吗?

4

1 回答 1

2

ASP Classic 脚本始终使用模拟运行(这与默认情况下模拟关闭的 ASP.NET 不同)。

因此,由于您使用 SSPI 而需要访问数据库的用户需要是被模拟的用户。

默认情况下,模拟用户是指定为匿名用户的 IUSR 帐户,但是如果您打开了 Windows 集成安全性,那么用户很可能是运行客户端浏览器的用户帐户。无论哪种情况,您都需要确保被模拟的用户有权访问数据库或停止使用 SSPI。

如果您只使用匿名访问,您可以通过 IIS 管理器指定用于匿名访问的帐户是应用程序池标识。

于 2012-06-05T11:26:01.743 回答