【问题标题】:MS SQL Job running stored procedure over linked server with windows authMS SQL 作业在具有 Windows 身份验证的链接服务器上运行存储过程
【发布时间】:2020-01-08 09:27:07
【问题描述】:

我有安装了 SQLSRV01 和 SQLDB01 数据库的 SRV01 服务器。在该服务器上,我在 Windows SQLAgent 帐户下运行了 SQL Server 代理服务(无法更改)。此外,我将链接服务器设置为位于 SRV02 机器上的 SQLSRV02,该机器使用当前安全上下文进行身份验证。我有 Windows 用户 DOMAIN\IntegrationUser01 可以访问两台服务器上的两个数据库。 然后我创建了简单的存储过程,它从远程表中读取数据并将其写入本地(当我以 IntegrationUser01 身份登录到 SQLSRV01 时测试并工作)。 最后,我设置了作业来执行该存储过程。我将 DOMAIN\IntegrationUser01 设置为 JOB 的所有者,并设置为运行步骤的用户(步骤 -> 属性 -> 高级 -> 运行方式)。

它不起作用。作业执行以异常结束:

链接的服务器不能在没有映射的情况下被模拟使用 用于模拟登录。

据我了解,第一步中的 SQLAgent 帐户将自己模拟为 IntegrationUser01 以运行 JOB,然后需要能够通过链接服务器将这些凭据委托给 SRV02 以进行身份​​验证。由于没有 Kerberos 协议来处理第二个循环,它会在不存在的 SQLSRV02 服务器上查找到 SQL 用户的映射。

是否有可能在没有 Kerberos 的情况下建立这样的架构?或者我只是做错了什么?

【问题讨论】:

    标签: sql-server windows-authentication linked-server


    【解决方案1】:

    如果可能,请尝试以下解决方案之一:

    1) 提供对链接服务器上 SQL 代理服务帐户的访问权限

    2) 转到服务器对象 > 链接服务器 > 选择服务器并转到属性 > 在安全选项卡中提供对链接服务器具有访问权限的用户名。

    【讨论】:

    • 1.) 我正在根据客户的要求工作。在我证明某些事情无法完成之前,我不能使用变通方法。 2.) 没那么简单。
    【解决方案2】:

    我找到了解决方案并使用了 SQL Server 代理。不幸的是,它不适用于 T-SQL JOB Steps,但解决方法非常简单。

    1.) 您需要在 SQL Server 中保存 DOMAIN\IntegrationUser01 windows 凭据(下面的 scr 中的 Internal_SQL_Credential_Name)(安全 -> 凭据)

    2.) 您在 SQL Server 代理节点中为 CmdExe 子系统(下面 scr 中的 Internal_SQL_Proxy_Name)设置代理,并将其指向创建的凭据。

    3.) 对于代理,您添加主体登录。由于这是 sql windows auth,因此您选择“DOMAIN\IntegrationUser01”

    4.) 您将步骤类型更改为:CmdExe 并运行为:Internal_SQL_Proxy_Name(默认为 SQL Server 代理服务帐户)。

    5.) 作为您设置的命令:SQLCMD -Q"EXEC DataBaseName.SchemaName.StoredProcedure" -E -S ServerName

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 2020-12-07
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      相关资源
      最近更新 更多