【问题标题】:Permission Error using SQL Server and Integrated Security使用 SQL Server 和集成安全性的权限错误
【发布时间】:2017-01-03 09:42:38
【问题描述】:

我有一个作为域用户运行的 Windows 服务 (.NET),它对所需的数据库资源和文件系统具有完全权限。该服务调用一个过程,该过程调用 SQL Server 中的批量插入语句。

该服务以集成的安全性运行,该帐户已被授予登录为服务的权限。但是,当服务在 SQL Server 所在位置以外的其他服务器上运行时,我会遇到权限问题。

app Server 叫 Srv01,db server 叫 Sql01。该过程使用 Sql01 中的过程生成 pdf 并调用批量插入。当我在 Srv01 中安装 windows 服务时,出现以下错误:

Cannot bulk load because the file "//Srv01/Output/Letter.pdf" could not be opened. Operating system error code 5(Access is denied.).

网络共享对所有人都具有完全权限。我只是想让它工作并稍后加强安全性。

当我在与数据库相同的服务器(即Sql01)中使用相同的域用户运行相同的服务时,该过程正常工作。

我们正在运行:Windows Server 2012、SQL Server 2012 Enterprise,并且该服务是用 .NET 4.5 编写的。我曾尝试查看 sql server 和 app server 上的本地安全策略,但没有任何结果。是的,我也重新启动了应用服务器(虽然不是数据库)。

【问题讨论】:

  • 看起来像一个双跳问题:从 srv01 到 sql01 的身份验证有效,但是当 sql01 尝试模拟帐户访问 srv01 上的共享时失败。这里有很多可能出错的地方。 this site 详细描述了一种场景。
  • 感谢@JeroenMostert。那篇文章很有用,但它指向的论坛无法访问。我终于想通了!它与服务主体名称和 Kerberos 身份验证有关。我会写一个更大的条目作为答案。

标签: sql-server windows-services windows-server-2012


【解决方案1】:

我终于想通了,我将分享以下发现:

  1. 安装适用于 SQL Server 2012 的 Kerberos 配置工具并确保正确配置所有 SPN。网址:https://www.microsoft.com/en-us/download/details.aspx?id=39046 如果此工具在连接到 SQL Server 时出现任何错误,请检查本地组(可能是管理员),您可能有一个以 UUID 显示的已删除用户,然后将其删除。重新启动该工具并修复任何问题。

  2. 为 Windows 服务配置 SPN。语法是:

    setspn -a [service_class]/[FQDN]:port DOMAIN_NAME\domain_user

    请注意,您必须在网络中使用 FQDN,仅 IP 不起作用。端口是可选的。此外,来自[service_class] 只能来自选定的关键字列表。列表可在此处找到: https://technet.microsoft.com/en-us/library/cc772815(WS.10).aspx (信用去: https://serverfault.com/questions/350782/can-someone-please-explain-windows-service-principle-names-spns-without-oversi)

    就我而言,我使用了 http 服务器类(为什么?没有理由!自定义服务类对我不起作用)

    setspn -a http/Srv01.mydomain.com MYDOMAIN\myuser

  3. 接下来转到用户 SQL Server 域用户和 Windows 服务域用户的 Active Directory 属性。进入委派选项卡,然后“信任此用户以委派任何服务(仅限 Kerberos)”。

  4. 最后,重启windows服务(为了确定,我重启了SQL Server服务)。监控来自安装服务的服务器的连接:

    从 sys.dm_exec_connections 中选择 session_id、net_transport、client_net_address、auth_scheme WHERE client_net_address = 'XXX.XXX.XXX.XXX'

您应该会看到来自应用程序服务器的连接的 Kerberos。这也解决了文件权限的问题。

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2020-05-17
    相关资源
    最近更新 更多