SqlException:无法打开登录请求的数据库“path \ db.mdf”。登录失败。用户'NT AUTHORITY \ SYSTEM'登录失败

时间:2013-11-22 17:19:40

标签: c# sql-server entity-framework windows-services

我知道这个问题已经被多次询问过了,但我查看了答案并找不到解决问题的方法。

我在C#中构建了一个Windows Service,它连接到数据库并用其他来源的数据填充它。我为Account -> LocalSystem设置了ServiceProcessInstaller,为StartType -> Automatic设置了ServiceInstaller

我使用Entity Framework从数据库生成.edmx,这是一个连接字符串:

<add name="ConStringName"
         connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
     provider=System.Data.SqlClient;provider connection string='data source=(LocalDB)\v11.0;
     attachdbfilename=&quot;somePath\MyDbName.mdf&quot;;
     integrated security=True;connect timeout=30;
     MultipleActiveResultSets=True;
     App=EntityFramework'"
         providerName="System.Data.EntityClient" />

我有这段代码:

var objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objContext.ExecuteStoreCommand("DELETE FROM Properties;");

在第二行我得到了

Cannot open database "path\DbName.MDF" requested by the login. The login failed.
Login failed for user 'NT AUTHORITY\SYSTEM'.

到目前为止我尝试了什么:

1)为每个数据库表尝试了此代码:

GRANT SELECT, INSERT, UPDATE, DELETE ON  dbo.TableName TO "NT AUTHORITY\SYSTEM";

没有dbo。

 GRANT SELECT, INSERT, UPDATE, DELETE ON  TableName TO "NT AUTHORITY\SYSTEM";

2)我已在我的数据库中为此用户“NT AUTHORITY \ SYSTEM”设置了权限:
在SSMS中:数据库=&gt; myDatabase - &gt;安全 - &gt;用户 - &gt; 'NT AUTHORITY \ SYSTEM' - &gt;属性 - &gt;会员资格 - &gt;的db_owner

3)尝试在SQL Server中为此帐户设置perissions: 数据库 - &gt;安全 - &gt;登录 - &gt; 'NT AUTHORITY \ SYSTEM' - &gt;属性 - &gt;在这里设置db_owner

奇怪的事情: 有一次我重新启动电脑,一切正常!像这样LocalSystem有权限,Windows服务可以访问数据库并执行所有操作!

但是在某些情况下,此异常开始再次出现。我试图重启计算机但失败了。

我知道我错过了一些明显的东西。拜托,帮帮我找到这件事。

1 个答案:

答案 0 :(得分:1)

而不是尝试将数据库的权限设置为本地系统帐户,最好执行以下操作之一:

  1. 将运行Windows服务的帐户更改为已在数据库中拥有权限的Windows帐户。

  2. 请勿在您的连接字符串中使用integrated security=True,但请指定User IdPassword