Compartilhar via


Usando os Assemblies verificáveis com SQL Server

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

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. Estendidos procedimento armazenado, o resultado de passagens define e retorna os parâmetros de volta para o servidor.

SQL Server 2005fornece extensões para Transact-SQL (T-SQL) para permitir que você instalar assemblies de verificáveis no SQL Server. O conjunto de permissões 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 verificável com segurança de tipos.

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

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

Para criar e carregar um assembly de verificável em 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 os valores irrestrito, seguro ou EXTENDED.

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

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

Exemplo

O seguinte script SQL Myscript. (por exemplo, nomeado "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 conecte a meu_servidor, usa o banco de dados padrão, usa uma conexão confiável, Myscript. SQL de entradas e saídas de MyResult.txt.

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

Consulte também

Referência

Como: Migrar para o /CLR: safe

Classes, Structures, and Unions