SQL Server в Windows: изменения механизма изоляции в Службах машинного обучения

Применимо к: SQL Server 2019 (15.x) и более поздних версий в Windows и SQL Server 2022 (16.x) — только Windows

В этой статье описываются изменения механизма изоляции в Службах машинного обучения в SQL Server в Windows, впервые представленные в SQL Server 2019. Эти изменения влияют на SQLRUserGroup, правила брандмауэра, разрешение файла и неявную проверку подлинности.

Дополнительные сведения см. в статье Установка служб машинного обучения SQL Server в Windows.

Изменения механизма изоляции

В Windows программа установки SQL изменяет механизм изоляции для внешних процессов. Это изменение заменяет локальные рабочие учетные записи на AppContainers — технологию изоляции для клиентских приложений, работающих под управлением Windows.

В результате этого изменения администратор не должен выполнять дополнительные действия. На новом или обновленном сервере все внешние скрипты и код, выполняемые из sp_execute_external_script автоматически подчинятся новой модели изоляции.

Общий обзор основных различий в этом выпуске:

  • Учетные записи локальных пользователей в группе Ограниченная группы пользователей SQL (SQLRUserGroup) больше не создаются и не используются для запуска внешних процессов. Их заменяют AppContainers.
  • Членство в SQLRUserGroup изменилось. Вместо нескольких учетных записей локальных пользователей в группу входит только учетная запись службы панели запуска SQL Server. Процессы R и Python теперь выполняются под учетной записью службы Launchpad, изолированные с помощью AppContainers.

Хотя модель изоляции изменилась, мастер установки и параметры командной строки остаются прежними по сравнению с предыдущими версиями SQL Server. Справку по установке см. в статьях Установка Служб машинного обучения SQL Server 2016–2019 и Установка Служб машинного обучения SQL Server 2022 (Python и R) в Windows.

Об изоляции AppContainer

В предыдущих выпусках группа SQLRUserGroup содержала пул учетных записей локальных пользователей Windows (MSSQLSERVER00-MSSQLSERVER20), используемых для изоляции и выполнения внешних процессов. Когда требовался внешний процесс, служба панели запуска SQL Server принимала доступную учетную запись и использовала ее для выполнения процесса.

Начиная с SQL Server 2019, программа установки SQL Server больше не создает локальные рабочие учетные записи. Вместо этого изоляция реализуется с помощью AppContainers. Во время выполнения при обнаружении внедренного скрипта или кода в хранимой процедуре или запросе SQL Server вызывает панель запуска с запросом на средство запуска, зависящее от расширения. Launchpad запускает соответствующую среду выполнения в процессе, выполняемом от его имени, и создает экземпляр AppContainer для ее размещения. Это изменение выгодно, поскольку управлять локальными учетными записями и паролями больше не нужно. Кроме того, в установках, где запрещены учетные записи локальных пользователей, устранение зависимости от учетной записи локального пользователя позволяет использовать эту функцию.

В реализации SQL Server AppContainers представляют собой внутренний механизм. Несмотря на то, что вы не найдете физических следов присутствия AppContainer в мониторе процессов, они отображаются в правилах брандмауэра для исходящих подключений, созданных программой установки, чтобы запретить процессам делать сетевые вызовы.

Правила брандмауэра, созданные программой установки

По умолчанию SQL Server отключает исходящие подключения, создавая правила брандмауэра. Раньше эти правила основывались на локальных учетных записях пользователей: установка создавала одно исходящее правило для SQLRUserGroup, запрещавшее доступ к сети для входящих в неё участников (каждая рабочая учетная запись указывалась как локальный субъект безопасности, подпадающий под это правило).

В рамках перехода на AppContainers введены новые правила брандмауэра, основанные на идентификаторах безопасности AppContainer: по одному для каждого из 20 AppContainers, созданных программой установки SQL Server. Соглашения об именовании для имени правила брандмауэра следующие: Блокировать сетевой доступ для AppContainer-00 в экземпляре SQL Server MSSQLSERVER, где 00 — это номер AppContainer (00–20 по умолчанию), а MSSQLSERVER — имя экземпляра SQL Server.

Примечание.

Если сетевые вызовы требуются, можно отключить правила исходящего трафика в брандмауэре Windows.

Разрешения для файла

По умолчанию внешние скрипты Python и R имеют разрешение только на чтение своих рабочих каталогов.

Если скриптам Python или R требуется доступ к какому-либо другому каталогу, необходимо предоставить учетной записи пользователя службы NT Service\MSSQLLaunchpad и группе ALL APPLICATION PACKAGES для этого каталога разрешения Чтение и выполнение и/или Запись.

Выполните следующие действия, чтобы предоставить доступ.

  1. В проводник щелкните правой кнопкой мыши папку, которую вы хотите использовать в качестве рабочего каталога, и выберите пункт "Свойства".
  2. Выберите Безопасность и нажмите кнопку Изменить, чтобы изменить разрешения.
  3. Нажмите кнопку Добавить.
  4. Убедитесь, что в поле В следующем месте: указано имя локального компьютера.
  5. Введите ВСЕ ПАКЕТЫ ПРИЛОЖЕНИЙ в поле Введите имена выбираемых объектов и нажмите Проверить имена. Щелкните OK.
  6. В столбце Разрешить установите флажок Чтение и выполнение.
  7. Если требуется предоставить разрешения на запись, установите флажок Запись в столбце Разрешить.
  8. Нажмите кнопку ОК, затем еще раз нажмите кнопку ОК.

Разрешения для файлов программы

Как и в предыдущих выпусках, SQLRUserGroup по-прежнему предоставляет разрешения на чтение и выполнение исполняемых файлов в каталогах SQL Server Binn, R_SERVICES и PYTHON_SERVICES. В этой версии единственным членом группы SQLRUserGroup является учетная запись службы Launchpad SQL Server. Когда служба панели запуска запускает среду выполнения R или Python, процесс выполняется как служба панели запуска.

Неявная аутентификация

Как и ранее, дополнительная настройка по-прежнему необходима для неявной проверки подлинности в случаях, когда скрипт или код должен подключиться к SQL Server с помощью доверенной проверки подлинности для получения данных или ресурсов. Дополнительная конфигурация включает в себя создание имени входа базы данных для группы SQLRUserGroup, единственным членом которой теперь является одна учетная запись службы панели запуска SQL Server, а не несколько учетных записей рабочих ролей. Дополнительные сведения об этой задаче см. в разделе Добавление SQLRUserGroup в качестве пользователя базы данных.

При установке SQL Server создается символическая ссылка на текущие используемые по умолчанию R_SERVICES и PYTHON_SERVICES. Если вы не хотите создавать эту ссылку, можно предоставить разрешения на чтение всех пакетов приложений для иерархии, ведущей к папке.