2009-11-30 55 views
2

我使用Forms身份验证将我的ASP站点的服务器的ASPNETDB.MDF文件从我的本地计算机上拉下来。我使用ASP.NET网站配置工具向数据库文件添加了新用户。我上传的MDF文件传回服务器,现在我得到下面的异常,每当我试图登录的任何用户:这里无法打开用户默认数据库

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

我一直在谷歌上搜索并阅读所有其他的解决方案,这个问题在SO上也没有发现任何有用的东西。

服务器上有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,所以我敢肯定,我乱七八糟的东西了地方。

任何帮助是极大的赞赏。

回答

2

关于谁或什么,或者为什么关于配置以外的所有问题......

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

第一个线索是只有SqlExpress启用用户实例。在Sql上,你将不得不附加mdf。

如果连接字符串在你的机器上,而在VS 2008中,你已经安装了SQL Express。如果该连接字符串在服务器上运行,则服务器安装了SQL EXPRESS。

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

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

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

+0

这些都是很好的解决方案,但我发现检查我已经安装的版本与服务器上的版本相比有一些不一致之处。看来,我的机器上有一个以前的安装残留,导致了一些问题。 – Casey 2010-02-10 13:08:53

+0

很高兴它解决了。是一个相当典型的情况,但并不总是很明显。 – 2010-02-10 18:18:22

0

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

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

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

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

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

为了解决这个问题,您需要检查您的连接字符串,web.config中的任何与表单验证相关的设置以及IIS中的安全设置。我认为这与所添加用户的事实无关。

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

+0

我根本没有修改web.config。刚刚复制了MDF文件。我假设我搞砸了一些属性或副本中的某些东西。 在我将修改的MDF复制过来之前,这是工作的,并且希望暂时继续使用当前的web.config文件。 – Casey 2009-11-30 04:09:51

+0

标记是正确的,即数据库用户在实例之间不可移植,并且在服务器之间移动的数据库需要将登录重新映射到该数据库。您可以随时尝试这样做,但不允许NETWORK SERVICE连接到您的数据库。您使用纯数据库驱动的表单身份验证,没有任何Active Directory集成,更正?我必须承认,我从来没有使用SQLEXPRESS,但我认为安全性与SQL Server不同。 – cdonner 2009-11-30 04:20:48

+0

顺便说一句,创建Web表单可以让你添加和编辑Forms Authentication用户帐号,这非常容易。来回移动数据库可能不是管理用户的最佳方式。 – cdonner 2009-11-30 04:21:41

1

我认为你的问题是,你不守数据库登录和数据库用户之间轨道的差别。登录可以访问SQL Server(一般情况下)。数据库用户是已被授予访问特定数据库的登录名。当您像往复一样复制文件时,可以使登录帐户(尤其是Windows帐户)的基础标识符无效。

我会建议你使用SQL帐户登录到您的SQL服务器(而不是Windows帐户),并放置在web.config文件中的凭据。我简单地发现,这比配置Windows帐户登录更容易配置,使用和更改。登录设置完成后,请确保它也具有用户访问您希望使用的服务器上的数据库的权限。你可能仍然遇到转移问题(虽然他们不太可能),但修复它们更容易。

重要提示:别人不同意 - 他们认为Windows帐户更安全 - 所以你可能要教育自己对这个问题!

+0

他正在讨论添加Forms身份验证用户。这些仅仅是.Net为此创建的表中的数据库行。 – cdonner 2009-11-30 04:10:21

0

可以尝试更改此 应用Pools->高级设置 - >流程模型 - >身份 ?

我得到了相同的错误,并通过更改过程模型进行修复。