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

标签 r database windows kerberos psexec

考虑以下场景:

  • 数据库服务器: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/

相关文章:

使用 R 重新排序李克特图中的组

r - 如何从目录树构建树状图?

mysql - MYSQL INSERT 中的 IF 语句不起作用

mysql - 批处理执行的日志输出问题

r - 改变长宽比,从角度绘制线段

r - 计算列数,直到每行找到一个值

mysql - 哪种类型的事件更适合存储在数据库中以供日志使用?

.net - 从 SQL Server 数据库项目生成可执行的 SQL 脚本

windows - Powershell:返回具有最大编号的文件名

c - 如何将代码点 32 位整数数组(UTF-32?)转换为 Windows native 字符串?