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 服务器实例的权限。
为此:
- 在 SQL Server Management Studio 的对象资源管理器中,展开安全性,右键单击登录,然后 select 新建登录。
- 在“登录 - 新建”对话框中,单击“搜索”。
- 单击对象类型和 select 组。 Deselect 其他一切。
- 在将对象名称输入 select 中,键入 SQLRUserGroup 并单击检查名称。
- 与实例的 Launchpad 服务关联的本地组名称应解析为类似 instancename\SQLRUserGroup 的名称。单击“确定”。
- 默认情况下,登录名被分配给 public 角色并有权连接到数据库引擎。
- 单击“确定”。
应该就可以了(以上步骤是从here.
复制过来的
如果您想了解更多关于用户帐户的信息,可以查看我的博客-post "Microsoft SQL Server R Services - Internals III".
希望对您有所帮助!
尼尔斯
此代码在 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 服务器实例的权限。
为此:
- 在 SQL Server Management Studio 的对象资源管理器中,展开安全性,右键单击登录,然后 select 新建登录。
- 在“登录 - 新建”对话框中,单击“搜索”。
- 单击对象类型和 select 组。 Deselect 其他一切。
- 在将对象名称输入 select 中,键入 SQLRUserGroup 并单击检查名称。
- 与实例的 Launchpad 服务关联的本地组名称应解析为类似 instancename\SQLRUserGroup 的名称。单击“确定”。
- 默认情况下,登录名被分配给 public 角色并有权连接到数据库引擎。
- 单击“确定”。
应该就可以了(以上步骤是从here.
复制过来的如果您想了解更多关于用户帐户的信息,可以查看我的博客-post "Microsoft SQL Server R Services - Internals III".
希望对您有所帮助!
尼尔斯