Skip to content
Tags

,

Como usar uma Assembly no SQL Server

27/09/2011

Sabemos que as assemblies de usuários (DLL) podem ser executados pelo SQL Server. Correto, mas quais são suas vantagens?

A vantagem de usar assemblies feitas em .Net (C# ou VB) é de usar cada vez mais os conceitos de POO, e aproximar nossa camada de negócios mais perto do banco de dados, evitando assim “viagens” desnecessárias.

Por padrão, a integração CLR (Common Language Runtime) vem desabilitada no SQL Server 2005/2008.
Para isso devemos habilitá-la.

-- verificando se execução de assembly é permitida 
sp_configure 'clr enabled';

-- execute esse comando, caso run_value for 1
sp_configure 'clr enabled', 1;
go

-- definir opção de configuração
reconfigure
go

O próximo passo é alterar a propriedade do banco de dados TRUSTWORTHY para ON.
Por padrão, esta configuração é OFF pois reduz que ameaças podem ocorrer ao anexar assemblies maliciosos, mas ela pode ser definida como ON usando a instrução ALTER DATABASE:

ALTER DATABASE AdventureWorks 
SET TRUSTWORTHY ON

Feito essas configurações, passamos para o ambiente de desenvolvimento Visual Studio.
Crie um novo projeto conforme a figura:

Sigam os passos de referenciar ao banco de dados desejado.
A seguir temos arquivo .css de exemplo, que foi adicionado (Add > New Item > User-Defined Function) ao projeto:

using System;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Security.Cryptography;

public partial class UserDefinedFunctions
{
    [SqlFunction(Name="setCriptoString")]
    public static SqlString setCriptoString( String s)
    {
        s = Criptografa(s);
        return new SqlString(s);
    }
    /// <summary>
    /// Método estático que retorna uma string criptografada
    /// </summary>
    /// <param name="cChave"></param>
    /// <returns></returns>
    public static string Criptografa(string cChave)
    {
        string cChaveCripto;
        Byte[] b = ASCIIEncoding.ASCII.GetBytes(cChave);
        cChaveCripto = Convert.ToBase64String(b);
        return cChaveCripto;
    }
};

Esse exemplo utiliza um método que tem a finalidade de criptografar uma string.
Compile o arquivo e efetue o Deploy (menu Build, Deploy no projeto), instalando a assembly no banco de dados referenciado.

E por fim temos a execução do método no SQL Server:

SELECT
	ContactId, 
	dbo.setCriptoString(EmailAddress) as EmailCripto 
FROM Person.Contact

Fontes:
http://msdn.microsoft.com/en-us/library/84b1se47.aspx
e
SQL Magazine Edição 91

Anúncios

From → Transact-SQL

One Comment
  1. Muito legal o post, sr. Anchieta.
    Vamos que vamos! 😀

    Andre Guerreiro (byo)

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: