1

此代码在 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
4

1 回答 1

4

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

这工作得很好,但是如果您需要在 R 脚本中创建 SQL 连接(如您的情况)并且您使用受信任的连接(Windows 身份验证),您将在上面提到的用户帐户下执行('myserver\LOCAL01' in您的情况),并且该帐户需要获得代表您登录 SQL Server 实例的权限。

去做这个:

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

应该这样做(上面的步骤是从这里复制的。

如果您想了解有关用户帐户的更多信息,可以查看我的博文“Microsoft SQL Server R Services - Internals III”

希望这可以帮助!

尼尔斯

于 2017-07-11T17:39:33.907 回答