Thiago Zavaschi R2 www.zavaschi.com

1Jun/093

Repostagem – Como Proteger as Minhas Stored Procedures ?

Como proteger as minhas stored procedures?

Bom pessoal, o assunto do post de hoje não é uma novidade, mas hoje a tarde estava conversando com um amigo (Eduardo Ordine) e chegamos ao assunto de proteção às stored procedures no banco de dados SQL Server, vamos lá!

“Thiago, estou colocando minhas stored procedures em um banco de dados compartilhado, ou que a administração não cabe a mim, e nas mesmas eu tenho regra de negócio importante e confidencial da minha empresa, tem como protegê-las?”

A resposta é: Sim!

As aplicações costumam ser divididas em camadas para agilizar seu entendimento e, principalmente, facilitar as manutenções. Acontece que eu, como consultor/estudante/desenvolvedor, já MUITAS empresas que colocam a regra de negócio em stored procedures do banco de dados, utilizando as linguagens de programação (.NET (C# e VB.NET), Delphi, VB, etc.) apenas como casca gráfica. Méritos e desvantagens à parte, temos o que: a necessidade de proteger estas procedures no banco de dados. Entendemos que “proteger” é igual a evitar que descubram o conteúdo das procedures.

Proteger 100% e garantir que NUNCA NINGUÉM conseguirá ver o conteúdo da procedure é utopia, mas podemos dificultar BASTANTE o acesso à mesma através da encriptação da procedure.

A stored procedure continua podendo ser executada normalmente (segundo as permições dos usuários da base de dados), mas ninguém ve o seu conteudo.

Como fazer?

Se a sua procedure ia ser criada com um comando similar a este:

CREATE PROCEDURE dbo.spImportante 
BEGIN 
    SELECT 'Thiago Zavaschi' 
END

Então utilize da seguinte forma:

CREATE PROCEDURE dbo.spImportante 
WITH ENCRYPTION 
AS 
BEGIN 
    SELECT 'Thiago Zavaschi' 
END

“Pronto Thiago, encriptei a minha procedure, estou seguro e não preciso me preocupar com mais nada, certo?”

Errado! E vejamos o porquê.

Vou criar aqui a procedure do exemplo acima e tentarei fazer alguns testes.

Primeiro farei um exec.

---------------

Thiago Zavaschi

(1 row(s) affected)

Beleza, executado com sucesso! Agora vou executar a sp_helptext:

The text for object 'spImportante' is encrypted.

Não consigo ver, até mesmo o “Modify” do Management Studio fica desabilitado, impedindo a geração do script (e o mesmo vale para todas as formas de geração de scripts do SSMS).

“Bom Thiago, para mim parece bem seguro.”

Será mesmo?

Vamos fazer mais um teste: Vou ligar o SQL Server Profiler monitorando o banco e vou executar novamente a procedure (vimos que a execução é permitida sem problemas), e temos:

Ok, texto encriptado, mas e se rodarmos o profiler DURANTE a criação da procedure:

Opa, opa, opa, temos a visualização da procedure. Tem como proteger-se disso? Tem sim, basta adicionar um comentário (-- comment: sp_password) ao seu script.

Infelizmente há como burlar essa segurança (não vou mostrar como se faz, pois não acho ético), eu fiz aqui alguns métodos mas não consegui para algumas procedures, pois eram SPs CLR.

Consegui abrir essas stored procedures por outros métodos (que também não vou comentar quais), mas fiz isso só para mostrar que com segurança não devemos brincar!

Então fica aí a dica!

E não se esqueçam de manter o código original da stored prcedure em um lugar a salvo (de preferência sob o controle de um controlador de código como o TFS, etc.).

Grande abraço e até a próxima!

Thiago Zavaschi

Comments (3) Trackbacks (0)
  1. Opa Thiago bacana seu post, mas se eu precisar fazer uma alteração na procedure, como descriptografar?

  2. Oi Gerson,
    Neste caso o melhor é manter um backup do código da procedure em um gerenciador como o TFS, SVN e similares.

    []s

  3. Bom dia Thiago

    Como seria isso?
    “basta adicionar um comentário (– comment: sp_password) ao seu script.”

    [],


Leave a comment


No trackbacks yet.