![SQL Server 2008 使用 ASP.NET 应用程序登录问题:无法打开明确指定的数据库](https://linux22.com/image/487303/SQL%20Server%202008%20%E4%BD%BF%E7%94%A8%20ASP.NET%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%99%BB%E5%BD%95%E9%97%AE%E9%A2%98%EF%BC%9A%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E6%98%8E%E7%A1%AE%E6%8C%87%E5%AE%9A%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93.png)
我在 Windows Server 2008 上运行 SQL Server 2008 Express Edition,其中有一个必须访问服务器的 ASP.NET 应用程序。ASP.NET 应用程序与在帐户上运行的应用程序池相关联NetworkService
。此帐户又在所需数据库中的 SQL Server 上具有登录名和用户记录。当我尝试运行 ASP.NET 网站时,我得到一个空白页,当在错误日志中查看时,我似乎得到了此信息事件记录:
用户“NT AUTHORITY\NETWORK SERVICE”登录失败。原因:无法打开明确指定的数据库。[客户端:myLocalMachine]
连接字符串有Trusted_Connection=True
;并且指定了所需的数据库。
当我明确指定用户名和密码时,我收到另一个登录错误,指出密码不正确,即使相同的 un/pw 组合通过 SQL Server Management Studio 起作用。该NETWORK SERVICE
帐户似乎具有数据库所需的所有权限。此外,我创建了一个测试 ASP.NET 网站项目,该项目从该数据库的表中进行简单选择,使用相同的配置文件,我没有收到错误,它似乎有效。
那么这是否与信任级别有关,因为原始 ASP.NET Web 应用程序引用了各种 DLL,包括开源库。此外,应用程序似乎无法写入事件日志本身,从而引发安全异常,即使配置文件中的所有内容(包括 machine.config)都表明应用程序处于完全信任状态。
答案1
我将使用在本地计算机上设置的显式帐户进行测试,并以匿名用户身份将其放入 IIS 应用程序中。这样,您就可以从 SSMS 或 VS 进行测试,并确保您可以毫无问题地连接到服务器和数据库。
一旦它工作正常,或者如果它不工作,您可以调试 ASP 端可能失败的位置。SQL 端很简单,但我没有尝试过网络服务帐户。应该没有理由它不起作用,但我没有看到任何人使用它。
答案2
我首先想到的是,web.config 文件中可能存在信任级别问题吗?另外,SQL Server 是处于 Windows 身份验证模式还是混合身份验证模式?SQL Server 是否配置了 TCP/IP?我认为在 SQL Server 2008 中 TCP/IP 被禁用,并且默认使用共享内存或命名管道。
答案3
如果数据库实例与 Web 应用程序位于不同的服务器上,那么您将需要为 DOMAIN\WEBSERVER$ 添加 SQL 登录,然后授予其对正确数据库的访问权限。
答案4
我花了一个多小时来追踪这个错误。我尝试了很多方法,包括 Sql Server 配置、添加网络服务用户等。
您需要确保连接字符串中指定的数据库与您授予用户权限的数据库匹配。
然而,最终我遇到的问题是我的数据库连接字符串中有一个拼写错误 - al 和 i 被颠倒了,这在我使用的分辨率下很难发现。
所以我的建议是:找到另一个允许你测试连接字符串的应用程序,然后测试连接字符串。