Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:
SQL Server Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
Службы Microsoft SQL Server Analysis Services предоставляют множество встроенных функций для использования с многомерными выражениями (MDX) и языком расширений интеллектуального анализа данных (Data Mining Extensions, DMX), предназначенных для выполнения задач от стандартных статистических вычислений до обхода элементов в иерархии. Но, как и в любом другом сложном и надежном продукте, всегда необходимо расширить функциональные возможности такого продукта дальше.
Таким образом, службы SQL Server Analysis Services позволяют добавлять сборки в экземпляр или базу данных SQL Server Analysis Services. Сборки позволяют создавать внешние, определяемые пользователем функции с помощью любого языка среды CLR, например Microsoft Visual Basic .NET или Microsoft Visual C#. Вы также можете использовать языки автоматизации компонентной объектной модели (COM), такие как Microsoft Visual Basic или Microsoft Visual C++.
Это важно
Сборки COM могут представлять угрозу безопасности. В связи с этим риском и другими соображениями сборки COM были устаревшими в SQL Server 2008 Analysis Services (SSAS). Сборки COM могут не поддерживаться в будущих выпусках.
Сборки позволяют расширить бизнес-функции MDX (многомерные выражения) и DMX (интеллектуальный анализ данных). Вы создаете функциональные возможности, которые требуется использовать в библиотеке, например библиотеку динамической компоновки (DLL) и добавляете библиотеку в качестве сборки в экземпляр служб SQL Server Analysis Services или в базу данных SQL Server Analysis Services. Затем открытые методы в библиотеке предоставляются как определяемые пользователем функции для выражений многомерных выражений, процедур, вычислений, действий и клиентских приложений.
Сборку с новыми процедурами и функциями можно добавить на сервер. Сборки можно использовать для улучшения или добавления пользовательских функций, которые не предоставляются сервером. С помощью сборок можно добавлять новые функции в многомерные выражения (MDX), расширения для интеллектуального анализа данных (DMX) или хранимые процедуры. Сборки загружаются из расположения, в котором выполняется пользовательское приложение, а копия двоичного файла сборки сохраняется вместе с данными базы данных на сервере. При удалении сборки скопированная сборка также удаляется с сервера.
Сборки могут быть двух разных типов: COM и CLR. Сборки CLR — это сборки, разработанные на языках программирования .NET Framework, таких как C#, Visual Basic .NET, управляемый C++. Сборки COM — это com-библиотеки, которые должны быть зарегистрированы на сервере
К сборкам можно добавлять объекты Server или Database. Сборки сервера могут быть вызваны любым пользователем, подключенным к серверу, или любым объектом на сервере. Сборки базы данных могут вызываться только объектами или пользователями, подключенными к базе данных Database.
Простой Assembly объект состоит из основных сведений (имя и идентификатор), коллекции файлов и спецификаций безопасности.
Коллекция файлов ссылается на загруженные файлы сборок и соответствующие файлы отладки (PDB), если файлы отладки были загружены с файлами сборки. Файлы сборок загружаются из расположения, в котором приложение определило файлы, и копия сохраняется на сервере вместе с данными. Копия файла сборки используется для загрузки сборки при каждом запуске службы.
Спецификации безопасности включают набор прав доступа и подмену, используемую для запуска сборки.
Вызов пользовательских функций
Вызов определяемой пользователем функции в сборке выполняется так же, как вызов встроенной функции, за исключением того, что необходимо использовать полное имя. Например, определяемая пользователем функция, возвращающая тип, ожидаемый многомерными выражениями, включается в запрос многомерных выражений, как показано в следующем примере:
Select MyAssembly.MyClass.MyStoredProcedure(a, b, c) on 0 from Sales
Определяемые пользователем функции также можно вызывать с помощью ключевого слова CALL. Необходимо использовать ключевое слово CALL для пользовательских функций, возвращающих наборы записей или пустые значения, и нельзя использовать ключевое слово CALL, если пользовательская функция зависит от объекта в контексте инструкции MDX или DMX, например, текущего куба или модели интеллектуального анализа данных. Обычным использованием функции, вызываемой вне запроса типа MDX или DMX, является использование объектной модели AMO для выполнения административных функций. Например, если вы хотите использовать функцию MyVoidProcedure(a, b, c) в MDX-инструкции, используйте следующий синтаксис:
Call MyAssembly.MyClass.MyVoidProcedure(a, b, c)
Сборки упрощают разработку баз данных, позволяя разрабатывать общий код один раз и храниться в одном расположении. Разработчики клиентского программного обеспечения могут создавать библиотеки функций для служб SQL Server Analysis Services и распространять их с помощью своих приложений.
Сборки и определяемые пользователем функции могут дублировать имена функций библиотеки функций SQL Server Analysis Services или других сборок. Если вы вызываете определяемую пользователем функцию с помощью полного имени, службы SQL Server Analysis Services будут использовать правильную процедуру. Для обеспечения безопасности и устранения возможности вызова дублирующегося имени в другой библиотеке классов, SQL Server Analysis Services требует использовать только полностью квалифицированные имена для хранимых процедур.
Чтобы вызвать определяемую пользователем функцию из определенной сборки CLR, определяемая пользователем функция предшествует имени сборки, имени полного класса и имени процедуры, как показано здесь:
AssemblyName. FullClassName. ProcedureName(Argument1, Argument2, ...)
Для обратной совместимости с более ранними версиями служб SQL Server Analysis Services также можно использовать следующий синтаксис:
Имя сборки! FullClassName! ProcedureName(Argument1, Argument2, ...)
Если com-библиотека поддерживает несколько интерфейсов, идентификатор интерфейса также можно использовать для разрешения имени процедуры, как показано здесь:
Имя сборки! InterfaceID! ProcedureName(Argument1, Argument2, ...)
Безопасность
Безопасность сборок основана на модели безопасности .NET Framework, которая является моделью безопасности доступа к коду. Платформа .NET Framework поддерживает механизм безопасности доступа к коду, который предполагает, что среда выполнения может размещать как полностью доверенный, так и частично доверенный код. Ресурсы, защищенные безопасностью доступа к коду .NET Framework, обычно упаковываются управляемым кодом, который требует соответствующего разрешения перед включением доступа к ресурсу. Требование разрешения удовлетворяется только в том случае, если все вызывающие (на уровне сборки) в стеке вызовов имеют соответствующий доступ к ресурсу.
Для сборок разрешение на выполнение передается с помощью свойства PermissionSet в объекте Assembly . Разрешения, получаемые управляемым кодом, определяются политикой безопасности. В не хостинге среде служб SQL Server Analysis Services уже существует три уровня политики: в масштабе предприятия, компьютерный и пользовательский. Действующий список разрешений, получаемых кодом, определяется пересечением разрешений, полученных этими тремя уровнями.
SQL Server Analysis Services предоставляет уровень политики безопасности на уровне узла для общей среды выполнения (CLR) при его размещении; эта политика является дополнительным уровнем политики, ниже трех уровней политики, которые всегда применяются. Эта политика устанавливается для каждого домена приложения, созданного службами SQL Server Analysis Services.
Политика уровня узла служб SQL Server Analysis Services — это сочетание фиксированной политики служб SQL Server Analysis Services для системных компонентов и пользовательской политики для пользовательских сборок. Указанная пользователем часть политики узла служб анализа SQL Server Analysis Services основана на указании владельцем сборки одной из трех категорий разрешений для каждой сборки:
| Параметр разрешений | Description |
|---|---|
| Безопасного | Предоставляет разрешение на внутреннее вычисление. Этот контейнер разрешений не назначает разрешения для доступа к каким-либо защищенным ресурсам в .NET Framework. Это контейнер разрешений по умолчанию для сборки, если ни один из них не указан со свойством PermissionSet . |
| ExternalAccess | Предоставляет тот же доступ, что и параметр "Безопасный " с дополнительными возможностями доступа к ресурсам внешней системы. Этот контейнер разрешений не предоставляет гарантии безопасности (хотя это возможно для защиты этого сценария), но обеспечивает гарантии надежности. |
| Небезопасно | Не предоставляет ограничений. Гарантии безопасности или надежности для управляемого кода, выполняемого в рамках этого набора разрешений, не могут быть выполнены. Любое разрешение, даже пользовательское разрешение, включенное администратором, предоставляется коду, работающему на этом уровне доверия. |
Когда CLR размещается в службах SQL Server Analysis Services, проверка разрешений, основанная на стеке, останавливается на границе с нативным кодом SQL Server Analysis Services. Любой управляемый код в сборках SQL Server Analysis Services всегда входит в одну из трех категорий разрешений, перечисленных ранее.
Подпрограммы сборки COM (или неуправляемые) не поддерживают модель безопасности CLR.
Олицетворение
Когда управляемый код обращается к любому ресурсу за пределами служб SQL Server Analysis Services, службы SQL Server Analysis Services следуют правилам, связанным с параметром свойства ImpersonationMode сборки, чтобы убедиться, что доступ происходит в соответствующем контексте безопасности Windows. Так как сборки, использующие параметр безопасного разрешения, не могут получить доступ к ресурсам вне служб SQL Server Analysis Services, эти правила применимы только для сборок с помощью параметров разрешений ExternalAccess и unsafe .
Если текущий контекст выполнения соответствует Windows-аутентифицированному входу и совпадает с контекстом исходного вызывающего объекта (т. е. в середине отсутствует EXECUTE AS), службы SQL Server Analysis Services будут имитировать Windows-аутентифицированный вход перед обращением к ресурсу.
Если существует промежуточное значение EXECUTE AS, которое изменило контекст из исходного вызывающего объекта, попытка доступа к внешнему ресурсу завершится ошибкой.
Свойство ImpersonationMode может иметь значение ImpersonateCurrentUser или ImpersonateAnonymous. Параметр по умолчанию, ImpersonateCurrentUser, запускает сборку под учетной записью входа в сеть текущего пользователя. Если используется параметр ImpersonateAnonymous , контекст выполнения соответствует учетной записи пользователя входа Windows IUSER_servername на сервере. Это гостевая учетная запись Интернета, которая имеет ограниченные привилегии на сервере. Сборка, запущенная в этом контексте, может получить доступ только к ограниченным ресурсам на локальном сервере.
Домены приложений
Службы SQL Server Analysis Services не предоставляют домены приложений напрямую. Вследствие наличия набора сборок, работающих в одном приложении, домены приложений могут обнаруживать друг друга во время выполнения, используя пространство имен System.Reflection в .NET Framework или каким-либо другим способом, и могут вызывать их с использованием позднего связывания. Такие вызовы будут подлежать проверкам разрешений, применяемым системой безопасности на основе авторизации SQL Server Analysis Services.
Не следует полагаться на поиск сборок в одном домене приложения, так как граница домена приложения и сборки, которые входят в каждый домен, определяются реализацией.
См. также
Настройка безопасности хранимых процедур
Определение хранимых процедур