【问题标题】:Which user-account should a windows service run under on WIndows 2012Windows 服务应在 WINdows 2012 上运行的用户帐户
【发布时间】:2016-12-03 02:53:55
【问题描述】:

我正在尝试将服务从连接到公司本地服务器的本地 PC 移动到带有 SQL/Windows 2012 的第三方专用服务器。

如果我以 root 身份登录计算机并打开服务控件并为其授予“本地系统帐户”运行权限,那么这就像在我的脑海中敲钉子一样,并且此时服务正在运行(以及与桌面交互的能力——我有一个停止/启动 Win 表单,它为我提供了它连接到的第 3 方 API 的信息)——它运行。

它会运行,除非当它尝试连接到 localhost 数据库时,它需要将它炸毁,但以下情况除外:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接);

但是,如果我运行一个 .NET 程序,我会写给我有关机器的详细信息(例如驱动器、用户和登录时间、通过 localhost 发送电子邮件的能力、从外部 HTTP 请求获取服务器 IP)并连接到 localhost SQL Server 并使用与我的服务相同的连接字符串(DB、用户、PSW),然后它可以连接并提取有关 sys 视图和排序规则差异中的 SQL 用户的信息。

这是我在命令提示符下运行的控制台应用程序,就像我以 root 身份登录该框时一样,但我不必以管理员身份打开命令提示符,因为大多数其他应用程序需要取回这些详细信息并连接到相同的 SQL 数据库。

如果我只是尝试将服务更改为使用“现有帐户”或在框中输入 root 用户/psw 并尝试该服务甚至没有以“Windows 无法启动 xx本地计算机上的服务”,在事件查看器中,它只是一个未处理的 .NET 异常,似乎由于某种原因(权限 - 为什么它是 root 时?)无法记录到我为它创建的事件日志.

应用程序:BrainiacV2.exe 框架版本:v4.0.30319 描述:进程因未处理的异常而终止。异常信息:System.Diagnostics.EventLogInternal.WriteEntry(System.String, System.Diagnostics.EventLogEntryType, Int32, Int16, Byte[]) 的 System.ArgumentException 在 System.Diagnostics.EventLog.WriteEntry(System.String, System.Diagnostics。 BrainiacV2.BrainiacJobs.WriteToEventLog(System.Exception, System.String) 上的 EventLogEntryType)

这些错误只发生在组合的 Windows 2012/SQL 服务器上,而不是我的 Win7 PC 和远程数据库服务器上。

我确实阅读了这篇文章以及许多其他人说本地用户帐户应该足以让它运行。

what Windows account should a service run under to access network sql servers

如果所有核心代码都在服务使用的 DLL 中,任何有关调试此问题的建议都将不胜感激。

【问题讨论】:

    标签: .net sql-server windows-services user-permissions windows2012


    【解决方案1】:

    您的问题很难理解,但我会尝试。

    Windows 上没有“root”,除非有人使用该名称创建了帐户。

    我有一个停止/开始赢表

    您不能在 Windows 服务中拥有表单。它没有桌面,也是不允许的。

    并赋予其“本地系统帐户”权限以运行 . . .我有一个停止/启动 Win Form,它为我提供了它连接到的第 3 方 API 的信息)- 它运行。

    LocalSystem 帐户仅限于运行它的机器。它没有网络权限。如果您的数据库在另一台机器上,您将无法连接到它。解决方案是让服务以具有正确权限的用户身份运行。

    (以及与桌面交互的能力 -

    这在更高版本的 Windows 中不起作用,即使它起作用也是不可靠和不可预测的。

    提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接);

    这意味着命名管道提供程序未在 SQL Server 上配置,您正在尝试使用它。您可以对其进行配置,也可以将连接切换到实际在 SQL Server 中配置的提供程序。使用您指定的名称也可能无法访问服务器。您可以使用您指定的名称对其进行 ping 操作吗?

    最后一条消息表明您没有顶级 try/catch 块,这意味着错误是致命的。您需要捕获并处理它们,尤其是在服务中。

    如果您可以使您的问题更易于理解并缩小您遇到的确切问题,我可能会为您提供更多帮助。

    【讨论】:

    • 管理员给了我 root 作为我的主要用户登录。我知道的所有错误都不是致命的消息,因为需要完整的跟踪才能修复。也许它是从 Win7 到 Win2012 的副本。它在我的盒子本地帐户上运行,可以访问 SQL 和外部世界。您可以轻松制作桌面托盘中的 Win APP 表单,并可以连接到 Servcice。它让我停止/启动并告诉我第 3 方 API 是否已启动并运行,因此它是有用的桌面应用程序。所以在我的电脑上以这种格式工作得很好,只是让它进入 OVH 很可能 - 现在我认为它的法国 IP(法国 IPS)被第 3 方 API 阻止了。我可以ping通,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2011-04-22
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多