1

我知道这是一个经常被问到的问题,但我仍然收到此错误并且我尝试过:

  • 使用 localhost、IP 地址和连接字符串中的实例名称
  • 更改 SQL Server 配置管理器以启用命名管道和 TCP 确保数据库设置为允许远程连接
  • 在 Windows 防火墙中为 UDP 和 TCP 打开 1433 和 1434,实际上我尝试关闭防火墙一会儿看看它是否会连接
  • 使用 NETWORK SERVICE 确保浏览器和 MSSQLSERVER 服务都已启动并正在运行

现在有点奇怪。SQL Server 实例和运行网站的 IIS 在同一台机器上。

如果我打开浏览器并浏览到该网站,我会收到错误消息。如果我在本地计算机上打开浏览器并浏览到该网站,我会收到错误消息。如果我将开发 PC 中的连接字符串更改为运行 SQL Server 的远程服务器的 IP 地址并调试它连接并运行的应用程序没有错误!

我现在完全不知道可能是什么错误。

这是 SQL Server 2008 RC2。

我正处于放弃的边缘 - 我非常感谢你们所做的努力,我已经尝试了这里的所有建议,我得出的结论是服务器的设置一定出了问题,网站或数据库。重申一下,如果您使用远程桌面连接到服务器并使用http://gdservers您可以登录的网站连接到该网站,并且如果您使用http://gdservers.<domain>.co.uk登录失败,那么一切正常。事件日志中的错误是会员凭证失败,没有被防火墙或类似的东西阻止。如果还有其他建议,我很想听听,再次感谢。

4

7 回答 7

1

如果您的 Web 应用程序打算使用带有 SQL 登录名/密码的 SQL Server 身份验证,请确保您的连接字符串明确指出Integrated Security=False. 否则,您的连接可能会默认为 Windows 身份验证,并且不会按预期运行。

编辑

此外,请确保您正在调整的连接字符串是实际用于建立连接的连接字符串。当应用程序有多个可能有自己的配置设置的组件时,有时事情会变得混乱。例如,这里线程中的问题原来是:

我正在更新 web.config 上的连接字符串,但它是一个多层应用程序,数据访问组件位于单独的 .dll 中,并且有自己的连接字符串。

编辑

我开始怀疑 SQL Membership Provider 是否使用 Windows 身份验证连接到 SQL Server,即使您的数据连接不是。在此处查看视频,或许还可以查看您的设置(尤其是提供商设置步骤中的身份验证设置)。

于 2013-04-29T11:10:35.957 回答
1

我认为没有人发现它,我只是在星期三发现它,然后意识到我犯了另一个错误。如果有人在上面提到过,请告诉我,我会更改奖励并给他们积分。

成员资格提供程序中缺少 applicationName。我在星期三发现它并添加了一个,我没有意识到我在添加 applicationName 时犯了拼写错误,所以当我这样做时,它没有修复它,所以我认为它是问题。

昨天在查看代码时,我注意到我在更改它时拼写了 applicationName 'GSServers' 而不是 'GDServers',这一切都开始工作了。

不是一个非常令人满意的结论,我很抱歉。

感谢所有试图解决这个问题并坚持下去的人。

正如我所说,如果有人在某处的答案或评论中确实提到了这一点,请告诉我,他们可以得到要点。

于 2013-05-03T07:11:12.400 回答
0

评论:从安全角度来看,最好使用带有 Windows 用户帐户的 SSPI。

回答:

默认(未命名)实例将端口 1433 用于 SSL。确保您的命名实例具有正确分配的 SSL 端口:http:
//blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx

试试这些连接字符串(注意它们不使用'localhost' - 我相信这是区分大小写的):

  • 'Provider=SQLOLEDB;数据源=COMPUTERNAME\SQLEXPRESS;初始目录=Test;用户ID=COMPUTERNAME\USERNAME; 密码=密码;综合安全=假'

  • 'Provider=SQLOLEDB;数据源=.\SQLEXPRESS;初始目录=Test;用户ID=COMPUTERNAME\USERNAME; 密码=密码;综合安全=假'

  • 'Provider=SQLOLEDB;数据源=.\SQLEXPRESS;初始目录=Test;用户ID=COMPUTERNAME\USERNAME; 密码=密码;集成安全=SSPI'

附加编辑:

每当客户端与 SQL Server 在同一台机器上运行时,就会发生错误。当客户端从开发机器运行时,没有错误。您可能无法解析机器名称,因为 DNS 不支持任何名称。

建议:使用 localhost 连接。确保您可以ping localhost和/或telnet localhost 1433. 确保您的主机文件(例如 C:\Windows\System32\drivers\etc\hosts)有条目:

  127.0.0.1       localhost

或者,使用:(本地)\INSTANCENAME

运行 SQLCMD –L 列出安装(确认浏览器操作正确)。

确保您没有确保在同一台服务器上安装旧版本的管理工具。例如 2008 和 2005 工具不能共存 - 但 2008 工具是向后兼容的,因此您可以删除两者并干净地安装 2008。

于 2013-04-30T03:54:58.930 回答
0

愚蠢的问题,但是,您检查过登录凭据吗?我在这方面仍然是一个菜鸟,但我通过备份和恢复数据库(至少在 MS SQL Server 中)发现恢复的用户登录不起作用。

我不得不从数据库中删除用户并将其重新添加,然后一切正常。您是否正在非工作机器上访问不同版本的数据库?

于 2013-04-30T23:10:02.103 回答
0

您如何在连接字符串中指示数据源/服务器名称?我遇到过这样的情况:服务器上有一个主机文件重定向到其他地方,或者服务器由解析为服务器外部 IP 地址的域名指示,或者其他类似的奇怪情况。

此外,如果您在服务器上安装了 SQL Serve,是否还安装了 Management Studio?这是排除代码或权限错误的最快方法,只需通过 Management Studio 尝试变体,直到找到有效的登录详细信息(或知道无效)。

于 2013-05-01T02:37:18.147 回答
0

通常最简单和最安全的方法是使用集成安全性:

<connectionStrings>
    <add name="HitCounterContext"
         connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=db;Integrated Security=True"
         providerName="System.Data.SqlClient" />
</connectionStrings>

确保使用正确的实例名称,默认为“SQLExpress”。我不知道 IDE 是如何使用它的,但是在 IIS 中使用这个连接字符串至少应该成功连接(这不等于身份验证)。

可能身份验证失败,因为您的数据库必须具有应用程序池帐户的用户。如果您禁用自定义错误web.config以便收到 .net 错误消息,则错误消息应告诉您应用程序池用户的身份验证失败(该消息实际上告诉您使用的是哪个用户)。例如:如果您使用 IIS 7 创建一个名为“yoursite.com”的新网站,默认情况下它会创建一个名为“yoursite.com”的新应用程序池。有了它,您必须将用户添加到数据库中IIS APPPOOL/yoursite.com(可能不在用户列表中)并让它成为db_owner测试对象。

使用“SQL Server Management Studio”为应用程序池添加用户(对不起,它是德语。这实际上是添加用户后的表单,但添加时应该看起来相同):

添加应用程序池用户

之后,您的用户列表应如下所示

数据库用户列表

和服务器登录列表,如

服务器登录列表

每个应用程序池都有自己的服务器登录名和相应数据库的用户。

顺便说一句:从 Management Studio 进行连接的工作方式与从您的 asp.net 应用程序中进行连接的方式相同,只是您通常通过 SMS 使用当前用户:

在此处输入图像描述

因此,如果这有效,那么来自您的应用程序的连接也应该有效。其余的依赖于应用程序池的用户。

于 2013-05-01T09:56:56.210 回答
0

它试图在本地以 sa 身份登录的事实表明您没有在代码中使用连接字符串;我认为这不是 SQL 服务器问题,而是应用程序问题。

在您的应用程序中,确保您实际使用的是连接字符串的值。不要使用默认构造函数。例如

using(SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString)){ /* .. code */ }

不是

using(SqlConnection conn = new SqlConnection()){ /* .. code .. */ }

如果我将开发 PC 中的连接字符串更改为运行 SQL Server 的远程服务器的 IP 地址并调试它连接并运行的应用程序没有错误!

您的开发框可能已添加了经过身份验证的登录名,并且它会自动“工作”。

于 2013-05-01T14:27:53.150 回答