繁体   English   中英

如何使用Windows服务的Windows身份验证连接到sql-server?

[英]How to connect to sql-server with windows authentication from windows-service?

我在C#中编写了一个Windows服务,它应该使用System.Data.SqlClient连接到SQL-Server 2005 Express数据库。

由于Microsoft更喜欢使用Windows身份验证而非SQL身份验证,因此我尝试使用Trusted Conenction / Integrated Security连接到数据库。

但是,这不起作用,因为我得到一个System.Data.SqlClient.SqlException:用户'NT AUTHORITY \\ LOCAL SERVICE'登录失败。

是否可以使用其他Windows帐户登录?

目前,该服务似乎当前在LocalService帐户下运行,并且此服务帐户当前未在SQL上授权。

可以通过以下两种方式之一修复此情况:在SQL中授权的帐户下运行帐户,或者将LocalService帐户添加为SQL中的登录帐户。 特别:

  • 在服务管理控制台中更改运行服务的帐户。 (例如:计算机管理|服务和应用程序|服务然后右键单击相关服务上的“属性”)
  • 或者,在“Microsoft SQL Management Studio”中,将LSA帐户添加为登录名,并以可以访问所需数据库对象的方式设置此新主体(登录名)。

编辑 :第一种方法可能更可取,因为在系统中普遍存在LocalService帐户,授予它访问SQL的权限会暴露SQL,而数据库将使特定服务或使用它的驱动程序受到损害。
相反,通过引入特定帐户,可以更好地控制谁访问SQL对象以及如何访问。 这当然会带来配置这样一个帐户的问题,关于应该授予的权限,在系统级别(而不是SQL),并且根据底层服务的作用,可能需要创建此帐户相当强大,因此在其他方面的潜在责任....

当服务控制管理器启动Windows服务时,该过程作为特定用户执行,就像在操作系统上运行的任何其他进程一样。

有许多“内置”用户帐户用于运行Windows服务。 如果查看“计算机管理”中的“服务”节点,您可以看到完整的Windows服务集及其运行的帐户(在Windows 7中称为“登录身份”)。

根据我的经验,当我们希望Windows服务使用集成安全性与数据库通信时,我们采用以下第二种方法:

1)将其中一个内置帐户指定为“登录身份”帐户,并将此帐户添加为具有相应数据库权限的SQL Server实例上的登录名

2)使用/创建要使用的Windows服务的本地或域帐户,然后将此帐户添加为具有相应数据库权限的登录名。 安装程序可以在安装服务期间提示用户帐户凭据。

我不能声称自己足够专业地指出每种方法的所有优点和缺点,但是值得考虑以下方面:

  • 方法1所有以所选内置帐户运行的服务和流程都有权访问您的数据库。 方法2不是这种情况。

  • 使用方法1,密码配置由机器本身管理,但是使用方法2,密码可以由管理员管理,并且还符合任何所需的安全策略。

我希望这有帮助

如果要使用受信任的Windows身份验证,最简单的方法是使用权限为sql server数据库的域帐户(需要最少的权限)运行该服务。

您需要在SQL Express中授予对LOCAL SERVICE帐户的访问权限。 根据我的评论,我的建议是创建一个新的帐户,您的服务可以运行,然后在SQL Express中添加相关权限,换句话说,不要在LOCAL SERVICE下运行您的服务。

正如mjv所说,您需要为本地服务帐户授予对数据库的访问权限,或者使用其他帐户来运行该服务。 您询问了如何以编程方式更改帐户,这是通过为服务创建安装程序并将“帐户”属性更改为“用户”,然后指定用户名和密码来运行服务来完成的。

如果滚动到底部,以下链接包含有关创建安装程序的信息:

http://msdn.microsoft.com/en-us/library/aa984464(VS.71).aspx

虽然以下提供了有关Account属性的更多详细信息:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceprocessinstaller.account(VS.71).aspx

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM