Использование проверяемых сборок вместе с 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