2009-01-24 52 views
0

我的SQL Server Express 2005数据库有一个奇怪的问题。它运行在2003服务器上。使用VS2005,我可以毫无问题地访问数据库。但是,当我尝试运行应用程序我得到:C#asp.net无法打开用户默认数据库.ldf可能不正确

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但似乎没有改变它。

我很困惑。

乔恩

回答

0

的差异是不相关的文件夹,但这一事实,安全上下文被映射到一个数据库中的用户的ACL。您的数据库将为您的用户帐户映射可能为dbo。

如果网络服务帐户要使用数据库,您需要在数据库中创建一个用户以映射到机器帐户。

+0

如何做到这一点与SQL Server Express? – Jon 2009-01-24 22:56:17

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”。

我希望有所帮助。

0

我猜你正在运行非英文操作系统。

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

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

即使一些微软程序运行到这个陷阱,并显示安装时出现这样的错误!

1

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

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

(感谢asp.net forums