我拉了一个 ASPNETDB.MDF 使用 Forms 身份验证从 ASP 站点的服务器向我的本地计算机提交文件。我使用 ASP.NET 网站配置工具向数据库文件添加了一个新用户。我将 MDF 文件上传回服务器,现在每当我尝试以任何用户身份登录时都会出现以下异常:

Cannot open user default database. Login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

我一直在谷歌搜索并阅读了这个问题的所有其他解决方案,但没有找到任何有效的解决方案。

服务器上装有 SQL Server 2008,这就是我在本地计算机上使用 VS 2008 Professional 的情况。

我的连接字符串是(为了易读而添加换行符):

<add name="ASPNETDBConnectionString1" 
     connectionString="Data Source=.\SQLEXPRESS;
                       AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;
                       Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient"
/>

我是 SQL Server 新手,所以我很确定我在某个地方搞砸了一些事情。

任何帮助是极大的赞赏。

有帮助吗?

解决方案

关于配置的所有关于谁或什么或为什么的问题......

可以从连接字符串推断出您的问题。这将在本地针对 sql express 工作,但不适用于服务器上的 sql 本身。

第一个线索是只有 SqlExpress 启用用户实例。在 Sql 上,您必须附加 mdf。

如果该连接字符串在 VS 2008 中可以在您的计算机上运行,​​则您已经安装了 SQL EXPRESS。如果该连接字符串在服务器上有效,则该服务器已安装 SQL EXPRESS。

如果服务器没有安装 Sql Express 并将其配置为允许用户实例(我希望它没有),则该连接字符串将导致您遇到登录失败异常。

我还想知道你的来/自副本。通常,即使是复制,活动 mdf 的访问也会被拒绝。

请确认客户端和服务器端的 Sql 版本,并尝试查找两个 web.config 文件的先前副本以比较连接字符串。

其他提示

我认为您的问题是您没有跟踪数据库登录和数据库用户之间的区别。登录可以访问SQL Server(一般来说)。数据库用户是已被授予对特定数据库的访问权限的登录名。当您完成后来回复制文件时,您可以使登录帐户(尤其是Windows帐户)的基础标识符无效。

我建议您使用SQL帐户登录SQL服务器(而不是Windows帐户)并将凭据放在web.config文件中。我发现这比Windows帐户登录更容易配置,使用和更改。设置登录后,只需确保它还具有用户对您要使用的服务器上的数据库的访问权限。你可能仍然会遇到传输问题(虽然它们不太可能),但修复它们要容易得多。

重要提示:其他人不同意 - 认为Windows帐户更安全 - 因此您可能希望自己了解这个问题!

您对问题的描述不完整或与错误不一致。您需要提供更多信息以获得更好的答案,但这是我的初步答案。

该错误表示您的应用程序正在使用SQL的集成身份验证。因此,查看连接字符串会有所帮助。它可能在某个地方说'SSPI'。这意味着应用程序容器正在运行的用户(NETWORK SERVICE)正在尝试连接到数据库,但它不能,因为它没有这样做的权限。

所以你要么改变连接字符串作为你所做的一部分,要么NETWORK SERVICE以前是数据库用户(我认为不是一个好主意)。

您的web.config中可能还有其他与安全相关的设置。您的应用似乎使用表单身份验证如果IIS设置为允许匿名访问,并且您的web.config设置为进行模拟,那么这也可能导致NETWORK SERVICE尝试连接到SQL。

应用程序应该如何连接?您是否有一个服务帐户(单个用户帐户),通过表单身份验证进行身份验证的所有用户都应该进行数据库操作?如果是这样,那么您需要更改数据库连接字符串以包含用户和密码。

要解决此问题,您需要检查连接字符串,web.config中的任何与form-auth相关的设置以及IIS中的安全设置。我认为这些与您添加用户的事实无关。

编辑: 所以你正在使用集成安全性,就像我怀疑的那样。这不适用于Forms Auth,因为当用户使用其用户ID对您的应用进行身份验证时,您的应用会使用集成的身份验证(即NETWORK SERVICE)对数据库进行身份验证。您需要一个数据库服务帐户imo,如果您没有更改连接字符串,我不知道它之前是如何工作的。

你能尝试改变这个吗? 应用程序池 - >高级设置 - &gt;过程模型 - &gt;身分 ?

我通过更改流程模型得到了同样的错误并修复了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top