我用 C# 编写了一个 Windows 服务,它应该使用 System.Data.SqlClient
连接到 SQL-Server 2005 Express 数据库。
由于 Microsoft 更喜欢使用 Windows 身份验证而不是 SQL 身份验证,我尝试使用可信连接/集成安全连接到数据库。
但是这不起作用,因为我得到了:
System.Data.SqlClient.SqlException: Login failed for user 'NT AUTHORITY\LOCAL SERVICE'.
是否可以使用不同的 Windows 帐户登录?
最佳答案
目前,该服务似乎在 LocalService Account 下运行并且此服务帐户当前未在 SQL 上获得授权。
可以通过以下两种方式之一修复这种情况:在 SQL 中授权的帐户下运行该帐户,或将 LocalService 帐户添加为 SQL 中的登录名。具体来说:
- 在服务管理控制台中更改运行服务的帐户。 (例如:计算机管理 | 服务和应用程序 | 服务,然后右键单击相关服务的“属性”)
- 或者,在“Microsoft SQL Management Studio”中,将 LSA 帐户添加为登录名,并以可以访问所需数据库对象的方式设置此新主体(登录名)。
编辑:第一种方法可能更可取,因为 LocalService 帐户在系统中非常普遍,授予它对 SQL 的访问权限会公开 SQL,而数据库会使用它的特定服务或驱动程序
相反,通过引入一个特定的帐户,人们可以更好地控制谁访问 SQL 对象以及如何访问。这当然带来了配置这样一个帐户的问题,关于它应该被授予的特权,在系统级别(而不是 SQL),并且取决于底层服务的作用,可能需要创建这个帐户相当强大,因此在其他方面有潜在的责任......
关于c# - 如何从 windows 服务使用 windows 身份验证连接到 sql-server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2244825/