我正在尝试让我的“Windows服务”连接到MS SQL Server的LocalDB。当我通过控制面板的服务启动“Windows服务”时,它失败了。我的相同“Windows服务”可以在Visual Studio下运行。
(根据控制面板的“服务”窗口,我的“Windows服务”使用LocalService。)
1)使用LocalService失败。
错误是:“用户'NT AUTHORITY \ LOCAL SERVICE'登录失败”。
我的错误连接字符串: add name =“LocalDB”providerName =“System.Data.SqlClient”connectionString =“Data Source =(LocalDb)\ v11.0; Initial Catalog = MyDatabase; Integrated Security = True”
2)我在(localDB)\ v11.0上添加了[NT AUTHORITY \ LOCAL SERVICE]的SQL Server登录,并通过SSMS授予db_owner,db_datareader和db_datawriter访问MyDatabase的权限。 (这会自动在MyDatabase下的Security \ Users \文件夹中创建数据库用户)。我仍然得到错误。
3)我在(localDB)\ v11.0上添加了EngineUser的SQL Server登录,并通过SSMS授予db_owner,db_datareader和db_datawriter访问MyDatabase的密码。
我已将WindowsService的连接字符串更改为:
add name =“LocalDB”providerName =“System.Data.SqlClient”connectionString =“Data Source =(LocalDb)\ v11.0; Initial Catalog = MyDatabase; Integrated Security = false; User Id = EngineUser; Password = EngineUser ;连接超时= 30“
获取错误“用户'EngineUser登录失败'”。
我已经出去以管理员身份运行命令提示符并确认用户和密码是好的: sqlcmd -S(localDb)\ v11.0 - U EngineUser -P EngineUser。
我已使用EngineUser的“SQL Server身份验证”和相同的密码在SSMS中连接到(localDb)\ v11.0。还确认我可以使用此连接在MyDatabase中选择和更新。
4)我有一个工作的WPF应用程序在(localDB)\ v11.0上使用MyDatabase而没有任何问题,但请记住这是一个传统的应用程序而不是“Windows服务”。
5)在Visual Studio中运行我的“Windows服务”的源代码,数据库连接正常,选择并插入数据行。
6)我尝试创建localDB的共享实例,但未能使其完全正常工作,并且不符合我的业务需求。
7)验证我的(localDb)\ v11.0在(a.k.a。混合模式)上有“SQL Server和Windows身份验证模式”。
8)验证EngineUser的登录属性和[NT AUTHORITY \ LOCAL SERVICE]具有“授予连接数据库引擎的权限”,并且“登录”已启用。
9)使用MS Sql Server的Profiler连接到主动跟踪(localDB)\ v11.0,我看到在Visual Studio中运行我的WindowService的活动,我没有在控制面板的“服务”屏幕中看到任何启动我的WindowsService的活动。即使我打开“所有事件”以查看完整的事件列表并选中所有错误事件,然后选择“审核登录”和“审核登录失败”。
10)我看过类似的线程,例如: The login failed. Login failed for user 'NT AUTHORITY\NETWORK
答案 0 :(得分:1)
找到我的答案。每个单独的Windows帐户都有不同的LocalDb。由于我在登录时安装了应用程序,因此在我的CORP \ ewood帐户下安装了LocalDb。 Windows服务正在运行" LocalService"它正在寻找一个不同的不存在的LocalDb数据库。我的解决方案是在安装到" Log On As"最初安装应用程序的用户,从而创建了LocalDb。所以我需要将ServiceProcessInstaller的帐户,用户名和密码设置为安装用户。