У нас большой опыт работы с SQL Server, а также с R (как с отдельным продуктом). Мы настроили тестовый сервер SQL Server 2016 (производственная версия из MSDN) с установленным R. Машина работает нормально, и мы попробовали рудиментарный R, и он тоже работает нормально (что также означает, что мы ссылались на эту статью от Microsoft: https://msdn.microsoft.com/en-us/library/mt696069.aspx).
Итак, проблема, с которой мы столкнулись, заключается в попытке загрузить R-скрипт из места в нашей сети. Например:
source(“\\\\MyServer\\MyRDirectory\\MyRScript.R”);
На всякий случай, если UNC не работает, мы попытались сопоставить сетевой диск с буквой диска, но получили такое же сообщение об ошибке «Нет такого файла или каталога».
Кажется, есть проблема с правами доступа к этому файлу. Если мы скопируем этот файл на локальный тестовый сервер, он будет работать нормально. Например, у нас нет проблем с этим:
source(“C:\\Temp\\MyRScript.R”);
Для этого теста я использую SSMS 2016, и я вошел в систему как пользователь Windows AD с разрешениями DBO, и у меня есть разрешения на удаленную папку. Учетные записи службы SQL Server 2016 также являются «пользователями» AD с соответствующими разрешениями. Я читал, что у R есть своя группа пользователей (SQLRUUserGroup) и в этой группе 20 учетных записей пользователей — все это назначается SQL Server во время установки; это учетные записи, которые являются локальными для тестовой машины. Я подозреваю, что проблема в этом: R/SQL Server должен пытаться получить доступ к этой сетевой папке/файлу как локальный пользователь, а не как пользователь AD с соответствующими разрешениями.
Кто-нибудь сталкивался с этим и нашел решение, которым вы можете поделиться?
К вашему сведению, как и ожидалось, запуск следующего R-скрипта в SQL Server 2016 (SSMS):
execute sp_execute_external_script
@language = N’R’
, @script = N’ OutputDataSet<- data.frame(c(USERNAME=Sys.getenv("USERNAME")),HOME=Sys.getenv("HOME"))'
, @input_data_1 = N''
WITH RESULT SETS ((USERNAME varchar(200),HOME varchar(200)))
Сообщает, что мой скрипт работает как «MSSQLSERVER01» с локальным/домашним каталогом и GUID для этого пользователя. Я уверен, что проблема в этом, но как мне изменить это, чтобы работать от имени пользователя AD с соответствующими разрешениями?
У меня сильное чувство, что это невозможно, но может ли кто-нибудь проверить?