一方面,我有一个Windows服务,它使用Entity Framework连接到SQL Server实例并在那里使用数据库。
另一方面,我有一个基于WIX的安装程序,它有一个基于.NET的引导程序GUI,用户可以在其中输入服务在连接字符串中使用的连接详细信息。在此安装程序GUI中,我还检查用户提供的数据并检查数据库连接(使用SqlConnection.Open(),甚至创建/删除数据库)。
问题出现在工作组环境中,没有域控制器,以及用户选择集成安全性时。引导程序应用程序成功连接到SQL服务器并使用它执行某些操作,但是Windows服务无法使用集成安全性连接到SQL服务器。如果我通过将其更改为用户和密码身份验证进行跟进,则该服务可正常运行。
如果服务失败,有没有办法让引导程序失败连接,反之亦然?
感谢。
答案 0 :(得分:1)
最可能的原因是服务正在运行的用户和运行安装程序的用户不同。
如果运行安装程序的用户可以通过Windows身份验证访问SQL Server,则连接将成功。然后,如果服务在不同的帐户(Say LocalSystem)下运行,则运行该服务的用户无权使用集成安全性。
使用在服务器上具有权限或使用SQL身份验证的服务帐户的方法。
我最近在部署服务时遇到了这个问题。使引导程序连接失败的唯一方法是将其作为服务运行的帐户运行(模拟是实现此目的的一种方法)否则无法正确测试连接。
由于您提到工作组而没有域控制器,因此可能会有一些传递用户名和密码。在我工作的一个地方,在一个SQL框(域外)上,每个开发人员都有一个本地Windows帐户,其密码与他们的域帐户相同。这允许传递身份验证(由于用户名和密码匹配)和访问SQL Server。这可能是正在发生的事情。