具有集成安全性的实体框架 SQL 连接问题

Posted

技术标签:

【中文标题】具有集成安全性的实体框架 SQL 连接问题【英文标题】:Entity Framework SQL Connection issues with Integrated Security 【发布时间】:2015-04-17 16:17:46 【问题描述】:

一方面,我有一个 Windows 服务,它使用实体框架连接到 SQL Server 实例并在那里使用数据库。

另一方面,我有一个基于 WIX 的安装程序,它有一个基于引导程序 .NET 的 GUI,用户可以在其中输入连接详细信息以供服务在连接字符串中使用。在这个安装程序 GUI 中,我还检查用户提供的数据并检查数据库连接(使用 SqlConnection.Open() 甚至创建/删除数据库)。

该问题出现在工作组环境中,没有域控制器存在,并且当用户选择集成安全作为选项时。引导程序应用程序成功连接到 SQL 服务器并对其执行一些操作,但随后 Windows 服务无法使用集成安全性连接到 SQL 服务器。如果我通过将其更改为用户和密码身份验证来跟进,则该服务可以正常工作。

如果服务失败,有什么方法可以让引导程序连接失败,或者相反?

谢谢。

【问题讨论】:

【参考方案1】:

最可能的原因是运行服务的用户和运行安装程序的用户不同。

如果运行安装程序的用户可以通过 Windows 身份验证访问 SQL Server,则连接将成功。然后,如果服务在不同的帐户(例如 LocalSystem)下运行,则运行该服务的用户没有使用集成安全性的权限。

使用在服务器上具有权限的服务帐户或使用 SQL 身份验证的解决方法。

我最近在部署服务时遇到了这个问题。使引导程序连接失败的唯一方法是将其作为服务将在其下运行的帐户运行(模拟是实现此目的的一种方法),否则您无法正确测试连接。

由于您提到工作组并且没有域控制器,因此可能会通过用户名和密码进行一些传递。在我工作的一个地方,在一个 SQL 框(域外)上,每个开发人员都有一个本地 Windows 帐户,其密码与其域帐户相同。这允许通过身份验证(由于用户名和密码匹配)和访问 SQL Server。这可能是正在发生的事情。

【讨论】:

以上是关于具有集成安全性的实体框架 SQL 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

具有 SQL Server 集成安全性的 Flyway

PHP PDO 连接到具有集成安全性的 SQL Server?

如何指定具有集成安全性的用户 ID/密码?

SQL Server 2012 - 集成安全性的远程连接问题

具有 SQL Server 连接的实体框架 6 尝试使用 MySqlClient 并崩溃

如何将此连接字符串转换为使用集成安全性?