c# - 如何从 windows 服务使用 windows 身份验证连接到 sql-server?

标签 c# .net sql-server sql-server-2005 windows-services

我用 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/

相关文章:

c# - Visual Studio 安装程序中的依赖项和 DLL

javascript - 使用 AJAX 和 FormData 在 POST 上绑定(bind)列表

c# - 使数据库类静态化?

.net - P/Invoke 和非托管 DLL 状态

c# - 异步方法不是在桌面上阻塞而是在服务器上阻塞?

sql-server - SQL Server 如何从日期获取当前季度的字段计数?

sql-server - SQL 更新语句的双重结果

c# - ASP.NET 中的并发线程和锁

sql-server - 我的数据库安全性如何失败?

c# - SharpZipLib - 将 ZipEntry 添加到 ZipFile 会引发 ZipException