gpt4 book ai didi

r - 如何在本地用户名下的远程计算机上运行 R 脚本(具有使用集成 Windows 身份验证的数据库连接)?

转载 作者:可可西里 更新时间:2023-11-01 09:50:46 26 4
gpt4 key购买 nike

考虑以下场景:

  • 数据库服务器:DBServer
  • R服务器:R服务器
  • 协调器服务器:Server1

我们有以下 R 脚本 (DB.r):

lib.directory = "D:\\RTest"
install.packages("RODBC", repos = "http://cran.us.r-project.org", lib = lib.directory)
library(RODBC, lib.loc = lib.directory)

db.string <- "driver={ODBC Driver 13 for SQL Server};server=DBServer;database=Databse1;trusted_connection=Yes;"
db.channel <- odbcDriverConnect(db.string)
close(db.channel)

Server1 使用以下代码在 R Server 上远程执行 R 脚本:

PsExec.exe \\RServer "C:\Program Files\R\R-3.4.3\bin\Rscript.exe" "D:\RTest\DB.r"

我收到以下错误:

[RODBC] ERROR: state 28000, code 18456, message [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

我们如何在不将用户名和密码作为 PsExec 的一部分发送的情况下解决此错误?

我们愿意使用任何替代方法来替换 PsExec。

最佳答案

问题不在于您的代码。你看到的是经典 “双跳”问题。当您使用集成的 Windows 身份验证(也称为 )登录到您的工作站时,Server1 知道您的身份。 ,RServer 不知道您的身份,因为从 Server1 传递给它的不是您的身份 token ,而是 Server1(本地系统)的机器帐户凭据。由于 RServer 可能不允许匿名访问,因此连接失败并显示:Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

在这种情况下,RServer 基本上是“Server2”,如下面的屏幕截图所示。从您的客户端工作站的角度来看,它是您的第 2 跳。

enter image description here

要完成这项工作,您需要在 Server1 上配置 Kerberos 委派,以便它能够将任何身份 token 传递给 RServer,以便连接成功。请注意,此身份 token 不是用户名或密码,而是 Kerberos 票证。您在运行将启动从 Server1 到 RServer 的连接的进程的帐户上配置 Kerberos 委派。该帐户需要有一个 .阅读本文中的步骤以了解此问题以及如何配置 SPN:Understanding Kerberos Double Hop

进一步引用:

SQL Server returns error “Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.” in Windows application

Web App getting Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

Permissions for PSExec run from SQL job

关于r - 如何在本地用户名下的远程计算机上运行 R 脚本(具有使用集成 Windows 身份验证的数据库连接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com