Поделиться через


Использование проверяемых сборок вместе с SQL Server (C++/CLI)

Расширенные хранимые процедуры, упакованные в библиотеки динамической компоновки (DLL), являются способом расширения механизма SQL Server с помощью разработанной функции Visual C++. Расширенная хранимая процедура реализуется в качестве функций внутри DLL. Более того, кроме функций расширенная хранимая процедура также может содержать пользовательские типы и агрегатные функции (такие как SUM или AVG).

Когда пользователь запускает расширенную хранимую процедуру, SQL Server осуществляет поиск хранимой процедуры, связанной с DLL, и выполняет загрузку. SQL Server вызывает необходимую расширенную хранимую процедуру и выполняет операцию в соответствии с указанным контекстом безопасности. Затем расширенная хранимая процедура передает пакеты результатов и возвращает параметры обратно на сервер.

SQL Server 2005 передает расширения в Transact-SQL (T-SQL), которые позволяют установить проверяемые сборки на SQL Server. В наборе разрешений SQL Server указывается контекст безопасности со следующими уровнями.

  • Неограниченный режим: запускает код с вашего разрешения. Код может не быть типобезопасным.

  • Безопасный режим: запускает безопасный проверенный код, компилированный с кодом /clr:safe.

Безопасный режим требует проверки безопасности выполняемых сборок.

Для того чтобы создать и загрузить проверяемую сборку в SQL Server, используйте команды Transact-SQL CREATE ASSEMBLY и DROP ASSEMBLY, как показано ниже:

CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH 
  PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>

Команда PERMISSION_SET указывает контекст безопасности и может содержать значения UNRESTRICTED, SAFE или EXTENDED.

Дополнительно можно использовать команду CREATE FUNCTION для объединения названий метода в классе:

CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]

Пример

Следующий скрипт SQL (например, под названием "MyScript.sql") загружает сборку в SQL Server и открывает доступ к методу класса:

-- Create assembly without external access
drop assembly stockNoEA
go
create assembly stockNoEA
from 
'c:\stockNoEA.dll'
with permission_set safe

-- Create function on assembly with no external access
drop function GetQuoteNoEA
go
create function GetQuoteNoEA(@sym nvarchar(10))
returns real
external name stockNoEA:StockQuotes::GetQuote
go

-- To call the function
select dbo.GetQuoteNoEA('MSFT')
go

Скрипты SQL интерактивно выполняются в анализаторе запросов SQL или в командной строке с помощью программы sqlcmd.exe. Следующая командная строка подключается к MyServer с помощью базы данных, заданной по умолчанию, надежных соединений, вводов MyScript.sql и выводов MyResult.txt.

sqlcmd –S MyServer -E –i myScript.sql –o myResult.txt

См. также

Ссылки

Практическое руководство. Миграция в /clr:safe (C++/CLI)

Классы, структуры и объединения