Usando assemblies verificáveis com SQL Server (C++/CLI)

 

Para obter a documentação mais recente do Visual Studio 2017 RC, consulte a documentação do Visual Studio 2017 RC.

Procedimentos armazenados estendidos, empacotados como bibliotecas de vínculo dinâmico (DLLs), fornecem uma maneira de estender a funcionalidade do SQL Server por meio das funções desenvolvidos com Visual C++. Os procedimentos armazenados estendidos são implementados como funções em DLLs. Além das funções, procedimentos armazenados estendidos também podem definir tipos definidos pelo usuário e funções de agregação (como SUM ou AVG).

Quando um cliente executa um procedimento armazenado estendido, pesquisas de SQL Server para a DLL associados com o procedimento armazenado estendido e carrega a DLL. SQL Server chama o procedimento armazenado estendido solicitado e o executa em um contexto de segurança especificado. O procedimento armazenado estendido passa resultado define e retorna os parâmetros de volta para o servidor.

SQL Server 2005 fornece extensões para Transact-SQL (T-SQL) para que você possa instalar 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 irrestrito: executar código em seu próprio risco; código não precisa ser fortemente tipado verificável.

  • Modo de segurança: verificável executar código typesafe; compilado com /CLR: safe.

Modo de segurança exige que os assemblies executados seja verificável typesafe.

Para criar e carregar um assembly verificável no SQL Server, use os comandos Transact-SQL CREATE ASSEMBLY e DROP ASSEMBLY da seguinte maneira:

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

O comando PERMISSION_SET Especifica o contexto de segurança e pode ter valores irrestrito, SAFE ou ESTENDIDOS.

Além disso, você pode usar o comando CREATE FUNCTION para associar a nomes de método em uma classe:

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

O seguinte script SQL (por exemplo, denominado "Myscript. SQL") carrega um assembly no SQL Server e disponibiliza um método de uma classe:

-- 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  

Scripts SQL podem ser executados interativamente no SQL Query Analyzer ou na linha de comando com o utilitário sqlcmd.exe. A seguinte linha de comando se conecta ao MyServer, usa o banco de dados padrão, usa uma conexão confiável, Myscript as entradas e saídas MyResult.txt.

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

Como migrar para /clr:safe
Classes e structs

Mostrar: