Проблема с разрешениями в SQL Server 2016 и R

У нас большой опыт работы с 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 с соответствующими разрешениями?

У меня сильное чувство, что это невозможно, но может ли кто-нибудь проверить?


person DotComCTO    schedule 26.09.2016    source источник


Ответы (1)


Службы R SQL Server всегда запускают сценарии в контексте рабочих учетных записей, которые являются локальными для системы, в целях безопасности и изоляции. И запустить их в контексте пользователя AD невозможно.

person Arun Gurunathan    schedule 26.09.2016
comment
Именно это я и подозревал, прочитав все статьи от Microsoft. облом. Интересно, поэтому у нас возникают проблемы с использованием доверенного подключения к одному из наших серверов баз данных в сценарии: conn <- odbcDriverConnect("driver={SQL Server};server=MySQLServer;database=MyDatabase;Trusted_Connection=True") - person DotComCTO; 27.09.2016
comment
Надежное подключение из сценария R обратно к базе данных, на которой запущены службы SQL Server R, является поддерживаемым сценарием. Можете ли вы подтвердить, прошли ли вы этап настройки для Включить подразумеваемую аутентификацию для учетных записей Launchpad ? Какое сообщение об ошибке вы получаете? - person Arun Gurunathan; 27.09.2016