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 теперь выполняются под удостоверением службы панели запуска, изолированной через AppContainers.
Хотя модель изоляции изменилась, мастер установки и параметры командной строки остаются прежними по сравнению с предыдущими версиями SQL Server. Справку по установке см. в статьях Установка Служб машинного обучения SQL Server 2016–2019 и Установка Служб машинного обучения SQL Server 2022 (Python и R) в Windows.
Об изоляции AppContainer
В предыдущих выпусках группа SQLRUserGroup содержала пул учетных записей локальных пользователей Windows (MSSQLSERVER00-MSSQLSERVER20), используемых для изоляции и выполнения внешних процессов. Когда требовался внешний процесс, служба панели запуска SQL Server принимала доступную учетную запись и использовала ее для выполнения процесса.
Начиная с SQL Server 2019, программа установки SQL больше не создает учетные записи рабочих ролей. Вместо этого изоляция реализуется с помощью AppContainers. Во время выполнения при обнаружении внедренного скрипта или кода в хранимой процедуре или запросе SQL Server вызывает панель запуска с запросом на средство запуска, зависящее от расширения. Панель запуска вызывает соответствующую среду выполнения в процессе со своим удостоверением и создает для нее контейнер AppContainer. Это изменение выгодно, поскольку управлять локальными учетными записями и паролями больше не нужно. Кроме того, в установках, где запрещены учетные записи локальных пользователей, устранение зависимости от учетной записи локального пользователя позволяет использовать эту функцию.
В SQL Server AppContainer является внутренним механизмом. Несмотря на то, что вы не найдете физических следов присутствия 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 и ВСЕ ПАКЕТЫ ПРИЛОЖЕНИЙ необходимо предоставить либо разрешение Чтение и выполнение, либо разрешение Запись.
Выполните следующие действия, чтобы предоставить доступ.
- В проводник щелкните правой кнопкой мыши папку, которую вы хотите использовать в качестве рабочего каталога, и выберите пункт "Свойства".
- Выберите Безопасность и нажмите кнопку Изменить, чтобы изменить разрешения.
- Нажмите кнопку Добавить.
- Убедитесь, что в поле В следующем месте: указано имя локального компьютера.
- Введите ВСЕ ПАКЕТЫ ПРИЛОЖЕНИЙ в поле Введите имена выбираемых объектов и нажмите Проверить имена. Щелкните OK.
- В столбце Разрешить установите флажок Чтение и выполнение.
- Если требуется предоставить разрешения на запись, установите флажок Запись в столбце Разрешить.
- Нажмите кнопку ОК, затем еще раз нажмите кнопку ОК.
Разрешения для файлов программы
Как и в предыдущих выпусках, SQLRUserGroup по-прежнему предоставляет разрешения на чтение и выполнение исполняемых файлов в каталогах SQL Server Binn, R_SERVICES и PYTHON_SERVICES. В этом выпуске единственным членом SQLRUserGroup является учетная запись службы панель запуска SQL Server. Когда служба панели запуска запускает среду выполнения R или Python, процесс выполняется как служба панели запуска.
Неявная проверка подлинности
Как и ранее, дополнительная настройка по-прежнему необходима для неявной проверки подлинности в случаях, когда скрипт или код должен подключиться к SQL Server с помощью доверенной проверки подлинности для получения данных или ресурсов. Дополнительная конфигурация включает в себя создание имени входа базы данных для группы SQLRUserGroup, единственным членом которой теперь является одна учетная запись службы панели запуска SQL Server, а не несколько учетных записей рабочих ролей. Дополнительные сведения об этой задаче см. в разделе Добавление SQLRUserGroup в качестве пользователя базы данных.
Символическая ссылка, созданная программой установки
Символическая ссылка для текущих расположений R_SERVICES и PYTHON_SERVICES по умолчанию создается в процессе установки SQL Server. Если вы не хотите создавать эту ссылку, можно предоставить разрешения на чтение всех пакетов приложений для иерархии, ведущей к папке.