无法打开用户默认数据库

时间:2009-11-30 03:23:10

标签: asp.net sql-server-2008 database-connection

我使用Forms身份验证从本地计算机上为ASP站点的服务器提取ASPNETDB.MDF文件。我使用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的新手,所以我很确定我在某个地方搞砸了什么。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

所有关于配置的人或者原因或原因的问题......

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

第一个线索是只有SqlExpress才能启用用户实例。在Sql上你必须附上mdf。

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

如果服务器没有安装Sql Express并配置为允许用户实例,正如我希望的那样,那么连接字符串将导致您遇到的登录失败异常。

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

该错误表示您的应用程序正在使用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,如果您没有更改连接字符串,我不知道它之前是如何工作的。

答案 3 :(得分:0)

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

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