Usando assemblies verificáveis com SQL Server (C++/CLI)
Os procedimentos armazenados estendidos, empacotados como (DLLs) bibliotecas de vínculo dinâmico) nativa, fornecem uma maneira para estender a funcionalidade do SQL Server com as funções desenvolvidas com Visual C++. Os procedimentos armazenados estendidos são implementados como funções dentro da DLL. Além das funções, procedimentos armazenados estendidos podem também definir tipos definidos pelo usuário e funções de agregação (como SUM ou AVG).
Quando um cliente executa um procedimento armazenado estendido, o SQL Server procura pela DLL associada com o procedimento armazenado estendido e carregar a DLL. O SQL Server chama o procedimento armazenado estendido solicitado e executá-lo em um contexto de segurança especificado. O procedimento armazenado estendido em passa conjuntos de resultados e retorna parâmetros de volta ao servidor.
SQL Server 2005 oferece extensões para T-SQL (Transact-SQL) para permitir que você instale os assemblies verificáveis no SQL Server. O conjunto de permissões do SQL Server especifica o contexto de segurança, com os seguintes níveis de segurança:
Modo ilimitado: Código de execução para seu próprio risco; o código não tem que ser tipo seguro verificável.
Modo de segurança: Execução de código de typesafe seguros de verificação; compilado com /clr:safe.
O modo de segurança requer assemblies executados ser seguros de verificação typesafe.
Para criar e carregar um assembly verificável no SQL Server, use os comandos Transact-SQL CREATE ASSEMBLY e DROP ASSEMBLY como segue:
CREATE ASSEMBLY <assemblyName> FROM <'Assembly UNC Path'> WITH
PERMISSION_SET <permissions>
DROP ASSEMBLY <assemblyName>
O comando de PERMISSION_SET especifica o contexto de segurança, e pode ter os valores ILIMITADOS, SAFE, ou ESTENDIDOS.
Além disso, você pode usar o comando CREATE FUNCTION associar a nomes do método em uma classe:
CREATE FUNCTION <FunctionName>(<FunctionParams>)
RETURNS returnType
[EXTERNAL NAME <AssemblyName>:<ClassName>::<StaticMethodName>]
Exemplo
O seguinte script SQL (por exemplo, denominado “MyScript.sql”) carrega um assembly no SQL Server e faz um método de uma classe disponível:
-- 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
Os scripts SQL podem ser executados de forma interativa no analisador de consultas SQL ou na linha de comando com o utilitário de sqlcmd.exe. A linha de comando a seguir conecta-se ao MyServer, usa o base de dados padrão, usa uma conexão confiável, MyScript.sql, as entradas e saídas MyResult.txt.
sqlcmd –S MyServer -E –i myScript.sql –o myResult.txt