quarta-feira, 25 de agosto de 2010

Dica: Criptografando os comandos de Stored Procedures e Views

Ao compilar uma aplicação construída em uma linguagem de programação usual, obtém-se um ou mais arquivos binários executáveis. Nesses arquivos, o código-fonte não é acessível, o que aumenta a proteção da lógica utilizada para escrever o programa.

O SQL Server permite fazer algo semelhante com as stored procedures e views armazenadas em seus bancos de dados. Em termos práticos, é possível criptografar os comandos SQL contidos em uma procedure ou view de forma que o comando sp_helptext não seja capaz de exibir o script do objeto em questão.

O uso da cláusula WITH ENCRYPTION permite que esta tarefa seja realizada.

Para exemplificar, utilizaremos a tabela Vendas.Clientes, definida abaixo:

CREATE TABLE Vendas.Clientes
(
  id                     INTEGER INDENTITY(1,1) PRIMARY KEY,
  nome               VARCHAR(50),
  email               VARCHAR(50),
  rendaMensal   MONEY
)

Criptografando uma Stored Procedure
Para criptografar uma Stored Procedure, deve-se incluir a opção WITH ENCRYPTION, ao criá-la , conforme o exemplo abaixo:

CREATE PROCEDURE Vendas.proc_rendaCliente
    @id int
WITH ENCRYPTION
AS
   SELECT nome, rendaMensal FROM Vendas.Cliente
   WHERE id = @id
GO

Ao executar a procedure do sistema sp_helptext passando como parâmetro o nome da procedure criada, o SQL Server mostra uma mensagem informando que a procedure não pode ser exibida porque foi criptografada. Veja o resultado abaixo:


Criptografando uma Stored Procedure
A criptografia dos comandos de uma View é muito semelhante à de uma Stored Procedure. Para criptografar uma View, deve-se incluir a opção WITH ENCRYPTION, ao criá-la , conforme o exemplo abaixo:

CREATE VIEW Vendas.vw_rendaClientes
WITH ENCRYPTION
AS
    SELECT nome, rendaMensal FROM Vendas.Cliente
GO

Ao executar a procedure do sistema sp_helptext passando como parâmetro o nome da view criada, o SQL Server mostra uma mensagem informando que o código da view não pode ser exibido porque  ela foi criptografada. Veja o resultado abaixo:

Conclusão
Criptografar os comandos de Stored Procedures e Views pode ser uma alternativa para aumentar a segurança de uma banco de dados, ocultando a lógica de processos implementados no banco e ocultando regras de negócio de uma solução.

Uma vez criptografado, não é possível recuperar o código que gerou o objeto. Portanto, é muito importante ter uma cópia do código-fonte em algum lugar seguro para fins de backup e manutenções futuras.

Referência
CREATE PROCEDURE (Transact-SQL) (MSDN)

2 comentários:

Rodrigo S. Teixeira disse...

Acredito que essa opção existente nas versões do SQL Server 2000 seria muito pertinente, mas desde a versão SQL Server 2005, temos mais um tipo de permissão aplicado a procedure: View Definition. Sem essa permissão um usuário sem permissões administrativas não teria acesso ao conteúdo de uma procedure, assim temos um controle maior das permissões e uma redução na possibilidade da falta do fonte da proc para uma manutenção.

Evandro Junqueira Ramos disse...

Muito bem lembrado! =)

Postar um comentário