无法从 Windows 服务连接到 SQL LocalDB,WPF 应用程序和 SSMS 工作正常吗?
Can't connect to SQL LocalDB from Windows Service, WPF app & SSMS work fine?
我正在开发的系统遇到了一些问题。就这个问题而言,布局是一个 WiX 内置的 msi 安装程序,它安装 SQL LocalDB 2012、一个 WPF 应用程序和一个 Windows 服务。 Windows 服务和 WPF 应用程序都将与同一个数据库进行通信,应用程序由用户交互驱动,服务在计时器上。
一切都安装得很干净,数据库实例以混合模式安装,因此我的数据库初始化程序为实例和数据库创建了一个新的登录名和用户,并且在 SSMS 中它们似乎都配置正确。我可以使用新登录名登录并查询表。这是我用来创建登录名的代码:
IF NOT EXISTS
(SELECT loginname
FROM master.dbo.syslogins WHERE name = 'BP_SERVICELOGIN')
BEGIN
CREATE LOGIN[BP_SERVICELOGIN] WITH PASSWORD = 'pw';
CREATE USER[bpUser] FOR LOGIN[BP_SERVICELOGIN] WITH DEFAULT_SCHEMA = dbo;
USE DatabaseName;
EXEC sp_addrolemember 'db_owner', 'bpUser'
END
所以我重申;此登录在 SSMS 中运行良好,允许我登录并访问由 WPF 应用程序的初始化程序创建的数据库。
但是,我无法从 Windows 服务登录到该数据库。我确保在我的连接字符串中使用新的登录名,并且一切都在那里正确设置。我怎么知道的?因为当我将连接字符串复制到我的 WPF 应用程序并使用它而不是 Windows 身份验证时,它有效!?!
服务不断失败并显示消息:
"System.Data.Entity.Core.EntityException: The underlying provider failed on Open. in EntityFramework:File: Method:Open Line:0 Column:0 System.Data.SqlClient.SqlException: Login failed for user 'BP_SERVICELOGIN'. in .Net SqlClient Data"
这是我正在使用的连接字符串:
<add name="ConnStringName" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=DbName;User Id=BP_SERVICELOGIN;Password=pw;MultipleActiveResultSets=True;Application Name=ServiceName" />
似乎有一些障碍阻止 Windows 服务的连接正常连接,而其他服务则没有这样的问题。 LocalDB 安装是全新的,除了创建的数据库和 Login/User 之外,没有从 OOB 状态对其进行任何操作。
有人能帮忙吗?
我不是 windows 服务方面的专业人士。
我认为错误出在您编写的 windows 服务中。使用会话零隔离,您可能必须 运行 指定用户帐户中的 windows 服务。
如果您可以提供 windows 服务 运行 的用户帐户,将会很有帮助。默认情况下,服务 运行s 在一个名为 SYSTEM 帐户的不同用户帐户中。此帐户可能没有访问数据库的权限。这可能会导致问题。
您能否检查一下这是否是您遇到的问题,所提出的解决方案是否对您有所帮助?
http://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
你描述的很奇怪,从你的描述来看一切看起来都不错,但 localdb 数据库这一事实令人怀疑。
您是否尝试在连接字符串中添加 Integrated Security=True;
?
我正在开发的系统遇到了一些问题。就这个问题而言,布局是一个 WiX 内置的 msi 安装程序,它安装 SQL LocalDB 2012、一个 WPF 应用程序和一个 Windows 服务。 Windows 服务和 WPF 应用程序都将与同一个数据库进行通信,应用程序由用户交互驱动,服务在计时器上。
一切都安装得很干净,数据库实例以混合模式安装,因此我的数据库初始化程序为实例和数据库创建了一个新的登录名和用户,并且在 SSMS 中它们似乎都配置正确。我可以使用新登录名登录并查询表。这是我用来创建登录名的代码:
IF NOT EXISTS
(SELECT loginname
FROM master.dbo.syslogins WHERE name = 'BP_SERVICELOGIN')
BEGIN
CREATE LOGIN[BP_SERVICELOGIN] WITH PASSWORD = 'pw';
CREATE USER[bpUser] FOR LOGIN[BP_SERVICELOGIN] WITH DEFAULT_SCHEMA = dbo;
USE DatabaseName;
EXEC sp_addrolemember 'db_owner', 'bpUser'
END
所以我重申;此登录在 SSMS 中运行良好,允许我登录并访问由 WPF 应用程序的初始化程序创建的数据库。
但是,我无法从 Windows 服务登录到该数据库。我确保在我的连接字符串中使用新的登录名,并且一切都在那里正确设置。我怎么知道的?因为当我将连接字符串复制到我的 WPF 应用程序并使用它而不是 Windows 身份验证时,它有效!?!
服务不断失败并显示消息:
"System.Data.Entity.Core.EntityException: The underlying provider failed on Open. in EntityFramework:File: Method:Open Line:0 Column:0 System.Data.SqlClient.SqlException: Login failed for user 'BP_SERVICELOGIN'. in .Net SqlClient Data"
这是我正在使用的连接字符串:
<add name="ConnStringName" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=DbName;User Id=BP_SERVICELOGIN;Password=pw;MultipleActiveResultSets=True;Application Name=ServiceName" />
似乎有一些障碍阻止 Windows 服务的连接正常连接,而其他服务则没有这样的问题。 LocalDB 安装是全新的,除了创建的数据库和 Login/User 之外,没有从 OOB 状态对其进行任何操作。
有人能帮忙吗?
我不是 windows 服务方面的专业人士。
我认为错误出在您编写的 windows 服务中。使用会话零隔离,您可能必须 运行 指定用户帐户中的 windows 服务。
如果您可以提供 windows 服务 运行 的用户帐户,将会很有帮助。默认情况下,服务 运行s 在一个名为 SYSTEM 帐户的不同用户帐户中。此帐户可能没有访问数据库的权限。这可能会导致问题。
您能否检查一下这是否是您遇到的问题,所提出的解决方案是否对您有所帮助?
http://www.codeproject.com/Tips/775607/How-to-fix-LocalDB-Requested-Login-failed
你描述的很奇怪,从你的描述来看一切看起来都不错,但 localdb 数据库这一事实令人怀疑。
您是否尝试在连接字符串中添加 Integrated Security=True;
?