代码之家  ›  专栏  ›  技术社区  ›  räph

如何通过Windows服务的Windows身份验证连接到SQL Server?

  •  12
  • räph  · 技术社区  · 16 年前

    我已经在C中编程了一个Windows服务,它应该用System.Data.sqlclient连接到SQL Server 2005 Express数据库。

    由于Microsoft喜欢使用Windows身份验证而不是SQL身份验证,因此我尝试使用可信连接/集成安全性连接到数据库。

    但是,当我得到system.data.sqlclient.sqlException时,这不起作用:用户登录失败 “NT授权\本地服务”。

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

    5 回复  |  直到 16 年前
        1
  •  14
  •   mjv    16 年前

    目前,服务似乎是在 LocalService Account 此服务帐户当前未在SQL上授权。

    这种情况可以通过以下两种方式之一来解决:在SQL中授权的帐户下运行该帐户,或者在SQL中添加LocalService帐户作为登录名。明确地:

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

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

        2
  •  4
  •   BrianB    16 年前

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

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

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

    1)将其中一个内置帐户分配为“登录为”帐户,并将此帐户添加为具有相应db权限的SQL Server实例上的登录名。

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

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

    • 使用方法1,所有作为所选内置帐户运行的服务和进程都将具有访问数据库的权限。方法2并非如此。

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

    我希望这有帮助

        3
  •  2
  •   Neerav    16 年前

    如果要使用受信任的Windows身份验证,最简单的方法是使用被授权给SQL Server数据库的域帐户(所需权限最小)运行服务。

        4
  •  1
  •   James    16 年前

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

        5
  •  1
  •   Waleed Al-Balooshi    16 年前

    正如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

    希望这有帮助。

    推荐文章