在 Web 服务器上打开 SQL Server 连接时出错

Posted

技术标签:

【中文标题】在 Web 服务器上打开 SQL Server 连接时出错【英文标题】:Error Opening SQL Server Connection on Web Server 【发布时间】:2011-07-13 12:47:37 【问题描述】:

这是我的错误:

错误 [28000] [Microsoft][ODBC SQL 服务器驱动程序][SQL Server]登录失败 对于用户'NT AUTHORITY\ANONYMOUS 登录'。错误 [28000] [微软] [ODBC SQL Server 驱动程序][SQL Server]登录 用户“NT”失败 权威\匿名登录'。

这是我在应用程序启动时的连接字符串:

MyConnection = New Odbc.OdbcConnection("DRIVER=SQL Server;SERVER=mysqlServer;Trusted_Connection=True;DATABASE=MyDatabase")

这是 Web.Config 的一部分:

<authentication mode="Windows"/> 
<identity impersonate="false"/>

这是我的 IIS(7) 设置:

身份验证

匿名身份验证:已禁用 ASP.NET 模拟:已禁用 基本身份验证:已启用 摘要式身份验证:已禁用 表单身份验证:已禁用 Windows 身份验证:已启用

连接字符串

MyDatabaseConnection:数据源=MySqlServer;初始目录=MyDatabase;集成安全=True Lo​​calSqlServer: 数据源=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true

【问题讨论】:

这里有些东西没有意义:如果您真的禁用了匿名身份验证,那么您似乎不太可能通过 IIS 的身份验证机制(没有 401 访问被拒绝)到正在查询数据库 我忘记提及的一件事是,当我使用本地主机从 (Visual Studio 2010) 运行应用程序时,sql 连接工作正常。所以换句话说,我确定连接字符串一定没问题。 【参考方案1】:

我相信在这种情况下您可能不得不使用 ASP.Net Impersonation。

http://weblogs.asp.net/achang/archive/2004/04/15/113866.aspx

【讨论】:

如果我在 web.config 中设置 并在 IIS 中启用它,那么我会收到以下错误:“500 - 内部服务器错误。有一个问题您要查找的资源,无法显示。” 发生错误时应用程序事件日志会显示什么内容? 似乎没有写入事件日志【参考方案2】:

正如 Zach 所说,您需要更改访问数据库的用户的凭据。

因此,您需要按照建议打开模拟,或者您应该更改用于运行您的网站的应用程序池所使用的用户 ID 和密码。 MSDN article 虽然有点旧,但仍然适用,应该可以帮助您做到这一点。

【讨论】:

【参考方案3】:

应该使用什么用户帐户连接到数据库?您的用户帐户、SQL 服务器上的帐户、IIS 应用程序池帐户?

默认情况下,如果您不为连接字符串提供用户名和密码,.NET 将使用 AppPool 的凭据,正如 Simen 所说,它对 SQL 服务器没有足够的权限。

如果您想使用访问该网站的用户的凭据(可能是个坏主意),您需要像 Thyamine 所说的那样使用模拟,但如果您想使用为数据库设置的 SQL 帐户,那么您需要将该用户的用户名和密码放入连接字符串中。 (http://www.sqlstrings.com/SQL-Server-connection-strings.htm)

【讨论】:

【参考方案4】:

如果您的 Web 应用程序在没有集成安全性的情况下运行。删除“允许匿名连接”安全选项。当 Web 服务器以 ANONYMOUS 身份进行身份验证时,请求将使用对您的 SQL Server 数据库没有足够权限的身份执行。

编辑:如果您在与客户端计算机不同的计算机上运行 Web 服务器,您可能需要调查服务器是否真正识别客户端计算机上使用的帐户。如果这些机器不是同一个安全域的一部分,你甚至可能不得不经历修改服务器的可疑程序 本地策略 --> 安全选项 --> 网络访问:本地帐户的共享和安全模型设置为:Classic - local users authenticate as themselves 并在服务器上创建具有相同名称和密码的用户帐户。

您可能还想调查服务器上的 http 日志

【讨论】:

在 Visual Studio 的 WebApp 解决方案中,我没有看到安全属性选项卡。我可以将它添加到 Web.Config 中吗? 忽略有关安全选项卡的内容。我在考虑早期 IIS 版本中的 UI。 如果我在 web.config 中设置 并在 IIS 中启用它,那么我会收到以下错误:“500 - 内部服务器错误。有一个问题您要查找的资源,无法显示。”

以上是关于在 Web 服务器上打开 SQL Server 连接时出错的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 2005 无法连接到服务器?

无法从 NET Core 2.2 Web API 连接到 docker sql server

无法从 Web 服务器连接到 SQL Server Express

Sql Server 配置管理器无法打开~!(无法连接到 WMI 提供程序)

如何在连接到局域网的其他电脑上使用SQL Server数据库运行桌面应用程序?

无法从Virtualbox连接到SQL Server