C#asp.net无法打开用户默认数据库.ldf可能不正确

时间:2009-01-24 22:37:01

标签: c# asp.net sql-server-express

我的SQL Server Express 2005 DB出现了一个奇怪的问题。它在2003服务器上运行。使用VS2005,我可以毫无问题地访问数据库。但是当我尝试运行应用程序时,我得到了:

 Cannot open user default database. Login failed.  Login failed for user 'NT AUTHORITY\NETWORK SERVICE'......... .ldf may be incorrect.

我已确保NETWORK SERVICE可以完全访问网站文件夹及其所有子文件夹。

我注意到当我查看App_Data的属性时,它只读取灰色勾号。 .MDF文件不是只读的,但我无法删除此灰色标记。我试过点击它直到它消失并应用更改,我尝试了ATTRIB -r但似乎没有任何改变它。

我很困惑。

乔恩

4 个答案:

答案 0 :(得分:1)

您实际使用的是SQL Server Express实例,还是只使用App_Data文件夹中的数据库文件?

如果您正在使用SQL Server实例并且安装了SQL Server Management Studio Express,那么您可以执行以下操作以使“网络服务”帐户访问数据库(考虑一下,您应该能够将Management Studio指向App_Data文件夹中的mdf,并执行相同的操作):

  1. 打开SQL Management Studio,连接到您的数据库并在对象资源管理器中打开它。
  2. 在服务器级别(MachineName \ SQL Express)展开“安全”部分 - 检查用户是否已经在下面的“登录”部分中。
  3. 如果没有,请右键单击“登录”,“新登录...”
  4. 确保登录类型设置为“Windows身份验证”,然后您可以:
    1. 点击“搜索...”,然后点击“高级...”,然后点“立即查找”,双击“NT服务”,“确定”下一个对话框。
    2. 只需在“登录名:”框中输入“NT Authority \ Network Service”。
  5. 然后,在“用户映射”页面(从左侧窗格中选择)中,在您希望此用户访问的数据库旁边放置一个勾号。
  6. 如果您有数据库角色(例如,如果此数据库安装了默认的ASP.NET成员资格/角色/配置文件表等),请确保为用户提供正确的角色 - 例如“aspnet_Membership_BasicAccess”。
  7. 我希望有所帮助。

答案 1 :(得分:1)

刚出现这个问题。我们在App_Data文件夹中使用了一个数据库文件。

“似乎我的数据库资源管理器中仍在我的IDE(Visual Web Developer Express)中打开了数据库。右键单击数据库并选择”关闭连接“修复它。”

(感谢asp.net forums

答案 2 :(得分:0)

差异与文件夹上的ACL无关,而是与安全上下文映射到DB中的用户的事实有关。您的数据库可能会将您的用户帐户映射到dbo。

如果网络服务帐户要使用数据库,则需要在数据库中创建用户以映射到计算机帐户。

答案 3 :(得分:0)

我猜你正在运行一个非英语操作系统。

不知何故,无论出于何种原因,当操作系统被翻译成其他语言时,网络服务的登录名有时会被本地化。

现在很多程序都希望将登录名硬编码为“NT AUTHORITY \ NETWORK SERVICE” - 在德语版本的Windows中,例如帐户名称为“NT-AUTORITÄT\ NETZWERKDIENST”。所以你的程序正在寻找英文名称,找不到它,并显示错误。

即使某些Microsoft程序遇到此陷阱,并在安装时显示如下错误!