考虑以下场景:
- 数据库服务器: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。
最佳答案
问题不在于您的代码。你看到的是经典kerberos “双跳”问题。当您使用集成的 Windows 身份验证(也称为 iwa)登录到您的工作站时,Server1 知道您的身份。 ,RServer 不知道您的身份,因为从 Server1 传递给它的不是您的身份 token ,而是 Server1(本地系统)的机器帐户凭据。由于 RServer 可能不允许匿名访问,因此连接失败并显示:Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
。
在这种情况下,RServer 基本上是“Server2”,如下面的屏幕截图所示。从您的客户端工作站的角度来看,它是您的第 2 跳。
要完成这项工作,您需要在 Server1 上配置 Kerberos 委派,以便它能够将任何身份 token 传递给 RServer,以便连接成功。请注意,此身份 token 不是用户名或密码,而是 Kerberos 票证。您在运行将启动从 Server1 到 RServer 的连接的进程的帐户上配置 Kerberos 委派。该帐户需要有一个 spn .阅读本文中的步骤以了解此问题以及如何配置 SPN:Understanding Kerberos Double Hop
进一步引用:
Web App getting Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
关于r - 如何在本地用户名下的远程计算机上运行 R 脚本(具有使用集成 Windows 身份验证的数据库连接)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871816/