我创建了一个Windows服务,我的服务依赖于SQL服务器服务。首先,SQL启动,然后在启动PC或重新启动PC时启动我的服务。
这工作正常,但问题是Windows服务无法读取数据库文件,抛出异常“无法打开用户默认数据库。登录失败。登录失败,用户'NT AUTHORITY \ SYSTEM'”当我试图读取数据库时。
如果我启动计算机并登录则无法读取数据库,但如果我已启动计算机并等待几秒钟然后登录窗口服务则会读取数据库。
我打赌你的连接字符串中有这个:
Integrated Security=SSPI
或类似的东西。
现在,服务在(NT AUTHORITY\SYSTEM
)下运行的帐户尝试连接到数据库 - 并且不能,因为它没有被授权这样做。
您可以:
NT AUTHORITY\SYSTEM
创建一个登录名,并为其提供所需的应用程序权限要么:
User ID=(your app account);pwd=YourPassword
转到数据库下的安全选项卡。
在security
下,单击以展开Users
选项卡。
查找天气NT AUTHORITY\SYSTEM
目前。
如果没有,请右键单击用户,单击新用户
在新用户窗口中,general
选项卡将user type
更改为windows用户。
选择用户名,NT AUTHORITY \ SYSTEM,你必须在Advanced tab, find now, and select system
中找到它。
同样对于登录名,browse and find NT AUTHORITY\SYSTEM
。
在左侧的成员资格选项卡中,选择所有必需的框,然后单击确定。
可能这会解决你的问题。希望这可以帮助。
我实际上只是在SQL Server中更改了NT AUTHORITY \ SYSTEM用户的权限,这对我有用。
你可以在连接字符串上添加它
坚持安全信息=真
我从连接字符串中删除了Trusted_Connection=yes
,它运行得很好。
简单的解决方案是检查您的web.config
文件,并确保其中一个是数据库连接字符串的一部分:
Trusted Connection=false
要么
Integrated Security=True