Enviado pelo Leitor: Criptografia no SQL 2000
Veja neste artigo enviado por Agnaldo Diogo dos Santos, como trabalhar com Criptografia no SQL Server 2000.
Criptografia no SQL 2000
No SQL 2000 podemos implementar um nível adicional de segurança, ao codificar, usando a cláusula WITH ENCRYPTION do comando CREATE para os objetos STORED PROCEDURE, FUNCTION ou VIEW. Isso nos dá a segurança de que o usuário, mesmo sabendo a senha do administrador (SA), não tenha acesso ao código-fonte do objeto.
Listagem 1. CRIANDO UMA PROCEDURE
USE NORTHWIND
GO
CREATE PROC BUSCA_EMPREGADOS
AS
SELECT EMPLOYEEID, FIRSTNAME, LASTNAME FROM EMPLOYEES
GO
Podemos recuperar o código-fonte, a qualquer momento, usando a procedure SP_HELPTEXT.
Listagem 2. VENDO O CÓDIGO-FONTE DE UMA PROCEDURE
EXEC SP_HELPTEXT BUSCA_EMPREGADOS
/*
RESULTADO:
Text
---------------------------------------------------------------
CREATE PROC BUSCA_EMPREGADOS
AS
SELECT EMPLOYEEID, FIRSTNAME, LASTNAME FROM EMPLOYEES
*/
Para que o código-fonte não possa ser visualizado, usamos a cláusula WITH ENCRYPTION.
Listagem 3. CRIANDO UMA PROCEDURE ENCRIPTADA E TENTANDO VER O CÓDIGO-FONTE
CREATE PROC BUSCA_EMPREGADOS_2
WITH ENCRYPTION
AS
SELECT EMPLOYEEID, FIRSTNAME, LASTNAME FROM EMPLOYEES
GO
EXEC SP_HELPTEXT BUSCA_EMPREGADOS_2
/*
RESULTADO:
The object comments have been encrypted.
*/
E se precisarmos recuperar o código-fonte? O que fazer? O SQL Server usa um algoritmo muito simples para criptografar seus objetos, baseado no operador XOR (OU EXCLUSIVO). Podemos reverter facilmente essa criptografia, aplicando, novamente, o XOR.
Listagem 4. CRIANDO UMA PROCEDURE QUE DECRIPTA PROCEDURES
CREATE PROCEDURE DECRIPTA (@OBJETO VARCHAR(50))
AS
DECLARE @A NVARCHAR(4000),
@B NVARCHAR(4000),
@C NVARCHAR(4000),
@D NVARCHAR(4000),
@I INT,
@T BIGINT
SET @A=(SELECT CTEXT FROM SYSCOMMENTS WHERE ID = OBJECT_ID(@OBJETO))
SET @B='ALTER PROCEDURE '
+ @OBJETO
+' WITH ENCRYPTION AS '
+REPLICATE('-', 4000-62)
EXECUTE (@B)
SET @C=(SELECT CTEXT FROM SYSCOMMENTS WHERE ID = OBJECT_ID(@OBJETO))
SET @B='CREATE PROCEDURE '
+ @OBJETO
+' WITH ENCRYPTION AS '
+REPLICATE('-', 4000-62)
SET @I=1
SET @D = REPLICATE(N'A', (DATALENGTH(@A) / 2))
WHILE @I<=DATALENGTH(@A)/2
BEGIN
SET @D = STUFF(@D, @I, 1,
NCHAR(UNICODE(SUBSTRING(@A, @I, 1)) ^
(UNICODE(SUBSTRING(@B, @I, 1)) ^
UNICODE(SUBSTRING(@C, @I, 1)))))
SET @I=@I+1
END
EXECUTE ('DROP PROCEDURE '+ @OBJETO)
IF CHARINDEX('WITH ENCRYPTION',UPPER(@D))>0
SET @D=REPLACE(UPPER(@D),'WITH ENCRYPTION', '')
SET @D=REPLACE(UPPER(@D),'WITH ENCRYPTION', '')
EXECUTE( @D)
GO
Para usar a procedure, é só fazer como no exemplo abaixo:
Listagem 05. DECRIPTANDO UMA PROCEDURE
EXEC DECRIPTA 'BUSCA_EMPREGADOS_2'
EXEC SP_HELPTEXT BUSCA_EMPREGADOS_2
/*
RESULTADO:
Text
---------------------------------------------------------------
CREATE PROC BUSCA_EMPREGADOS_2
AS
SELECT EMPLOYEEID, FIRSTNAME, LASTNAME FROM EMPLOYEES
*/
Podemos, ainda, adaptar a procedure DECRIPTA para que atenda às nossas necessidades de decriptar VIEWS e FUNCTIONS.
Agnaldo Diogo dos Santos é Tecnólogo em Processamento de Dados formado pela FATEC, pós-graduando em Matemática e Estatística pela Universidade Federal de Lavras, Microsoft Certified Systems Engineer, Microsoft Certified Database Administrator, Microsoft Certified Solution Developer e Sun Certified Programmer for the Java 2 Platform 1.4. É sócio da consultoria 50MINUTOS desde 1993 e, nas horas vagas, seu hobby é dar aulas (bancos de dados) na Impacta Tecnologia.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo