Архитектура расширяемости в расширениях языка SQL Server
Область применения: SQL Server 2019 (15.x) и более поздних версий
Сведения об архитектуре расширяемости, используемой для расширений языка SQL Server и позволяющей выполнять внешний код в SQL Server. Java, Python и R поддерживаются в SQL Server 2019 (15.x) и более поздних версиях. Код выполняется в языковой среде как расширение основного ядра СУБД.
Общие сведения
Целью платформы расширяемости является предоставление интерфейса между SQL Server и внешними языками. Администраторы баз данных могут поддерживать безопасность, выполняя доверенный язык в защищенной платформе, управляемой SQL Server, позволяя специалистам по обработке и анализу данных получать доступ к корпоративным данным.
Любой поддерживаемый внешний язык может быть запущен путем вызова хранимой процедуры, после чего табличные результаты возвращаются непосредственно в SQL Server. Это упрощает использование внешнего языка из любого приложения, которое может отправлять SQL-запрос и обрабатывать результаты.
Схемы архитектуры
Архитектура разработана таким образом, что внешний код выполнялся в отдельном от SQL Server процессе, но с компонентами, которые внутренне управляют цепочкой запросов на данные и операции в SQL Server.
Архитектура компонентов в Windows:
Архитектура компонентов в Linux:
Компоненты включают службу панели запуска, которая используется для вызова внешних сред выполнения (например, Java) и логики, зависящей от библиотеки, для загрузки интерпретаторов и библиотек.
Панель запуска
Панель запуска SQL Server — это служба, которая управляет временем жизни, ресурсами и границами безопасности внешнего процесса, отвечающего за выполнение скрипта. Это похоже на то, как служба полнотекстового индексирования и обработки запросов запускает отдельный узел для обработки полнотекстовых запросов. Служба панели запуска может запускать только доверенные средства запуска, опубликованные корпорацией Майкрософт, или сертифицированные корпорацией Майкрософт в качестве требований к производительности и управлению ресурсами.
Служба "Панель запуска SQL Server" работает в SQLRUserGroup, которая использует AppContainers для изоляции выполнения.
Для каждого экземпляра ядра СУБД создается отдельная служба панели запуска SQL Server, в которую добавляются расширения языка компьютера SQL Server. Существует одна служба панели запуска для каждого экземпляра ядра СУБД, поэтому если у вас есть несколько экземпляров с поддержкой внешних скриптов, у вас есть служба панели запуска для каждого из них. Экземпляр ядра СУБД привязан к созданной для нее службе панели запуска. Все вызовы внешнего скрипта в хранимой процедуре или T-SQL приводят к тому, что служба SQL Server вызывает службу панели запуска, созданную для одного экземпляра.
Для выполнения задач на определенном поддерживаемом языке панель запуска получает защищенную рабочую учетную запись из пула и запускает вспомогательный процесс для управления внешней средой выполнения. Каждый вспомогательный процесс наследует учетную запись пользователя панели запуска и использует ее во время выполнения скрипта. Если скрипт использует параллельные процессы, они создаются в одной рабочей учетной записи.
Каналы связи между компонентами
В этом разделе описаны протоколы связи между компонентами и платформами данных.
TCP/IP
По умолчанию внутренние связи между SQL Server и спутником SQL используют TCP/IP.
ODBC
Обмен данными между внешними клиентами обработки и анализом данных и удаленным экземпляром SQL Server использует ODBC. Учетная запись, отправляющая задания в рамках сценариев в SQL Server, должна иметь разрешения и для подключения к экземпляру, и для выполнения внешних скриптов.
Кроме того, в зависимости от задачи учетной записи могут потребоваться следующие разрешения:
- Чтение данных, используемых заданием
- Запись данных в таблицы. Например, при сохранении результатов в таблицу.
- Создание объектов базы данных: например, при сохранении внешнего скрипта в рамках новой хранимой процедуры
Когда SQL Server используется как контекст вычислений для выполняемого сценария, отправленного с удаленного клиента, а исполняемый сценарий должен получать данные из внешнего источника, для обратной записи используется ODBC. SQL Server сопоставляет идентификатор пользователя, вызывающего удаленную команду, с идентификатором пользователя в текущем экземпляре и выполняет команду ODBC, используя учетные данные этого пользователя. Строка подключения, необходимая для выполнения этого вызова ODBC, получается из клиентского кода.
Другие протоколы
Процессы, которые могут потребоваться для работы в блоках или передачи данных обратно удаленному клиенту, также могут использовать формат файла Xdf-File. Фактический перенос данных осуществляется через закодированные BLOB-объекты.