SQL 适用于 Rstudio 但不适用于 R-Services

SQL works in R studio but not in R-Serivces

此代码在 R-Studio 中运行良好,但无法在 MS Management Studio 中运行。它一直在说:

[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'myserver\LOCAL01'.

这不是我的用户,因为它是可信连接。有人可以帮我理解吗?

ALTER PROCEDURE [dbo].[TESTIM] AS
BEGIN
    SET LANGUAGE ENGLISH
    CHECKPOINT 
    DBCC DROPCLEANBUFFERS
    EXEC sp_execute_external_script
        @language = N'R'
        , @script = N'
        con <- "Server=myserver\LOCAL;Database=mydb;Trusted_Connection=true";
        sql <- RxInSqlServer(connectionString = con, shareDir = "c:\TMP");
        local <- RxLocalSeq(sql);
        rxSetComputeContext(local)
        ff <- RxSqlServerData(sqlQuery = "select top 1 * from mytable", connectionString = con);
        t = rxImport(ff);
        OutputDataSet <- data.frame(SUCCESS = TRUE);
        '
    WITH RESULT SETS (([SUCCESS] BIT))
END

因此,当您执行 sp_execute_external_script 时,它会在安装 SQL Server R Services 期间创建的 20 个 Windows 用户帐户(工作帐户)之一下执行。创建这些帐户是为了在属于 SQL Server Trusted Launchpad 服务的安全令牌下执行 运行 任务。

这非常有效,但是如果您需要在 R 脚本中创建一个 SQL 连接(如您的情况)并且您使用受信任的连接(Windows 身份验证),您正在执行在上面提到的用户帐户下('myserver\LOCAL01' 在你的情况下),并且需要授予该帐户代表你登录到 SQL 服务器实例的权限。

为此:

  1. 在 SQL Server Management Studio 的对象资源管理器中,展开安全性,右键单击登录,然后 select 新建登录。
  2. 在“登录 - 新建”对话框中,单击“搜索”。
  3. 单击对象类型和 select 组。 Deselect 其他一切。
  4. 在将对象名称输入 select 中,键入 SQLRUserGroup 并单击检查名称。
  5. 与实例的 Launchpad 服务关联的本地组名称应解析为类似 instancename\SQLRUserGroup 的名称。单击“确定”。
  6. 默认情况下,登录名被分配给 public 角色并有权连接到数据库引擎。
  7. 单击“确定”。

应该就可以了(以上步骤是从here.

复制过来的

如果您想了解更多关于用户帐户的信息,可以查看我的博客-post "Microsoft SQL Server R Services - Internals III".

希望对您有所帮助!

尼尔斯