我知道这个问题已经被多次询问过了,但我查看了答案并找不到解决问题的方法。
我在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="somePath\MyDbName.mdf";
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服务可以访问数据库并执行所有操作!
但是在某些情况下,此异常开始再次出现。我试图重启计算机但失败了。
我知道我错过了一些明显的东西。拜托,帮帮我找到这件事。
答案 0 :(得分:1)
而不是尝试将数据库的权限设置为本地系统帐户,最好执行以下操作之一:
将运行Windows服务的帐户更改为已在数据库中拥有权限的Windows帐户。
请勿在您的连接字符串中使用integrated security=True
,但请指定User Id
和Password
。