[SQL] Cifrando un Procedimiento almacenado en MS SQL Server 2008


Saludos amigos, he preparado un breve ejemplo de como Cifrar “Encriptar” un procedimiento almacenado desde MS SQL Server 2008.

Para empezar crearemos un procedimiento almacenado básico, este procedimiento ejecutara una consulta a una tabla llamada “DEMO_USUARIOS” de la base de datos “PRUEBA”.

1.Insertando los datos:

USE prueba;
GO

INSERT INTO DEMO_USUARIOS VALUES
('Ivan','Ragel','ivan.rangel.c@gmail.com','trew',GETDATE()),
('Claudia','Pérez','clau@gmail.com','456789',GETDATE()),
('Mariana','Ragel','mariana@gmail.com','123456',GETDATE()),
('Noriga','Rojas','negro@gmail.com','963852',GETDATE()),
('Pedro','Infante','infante@gmail.com','789456',GETDATE());
GO

SELECT * FROM DEMO_USUARIOS;
GO

Resultado:

image

2. Transformando la consulta a Procedimiento Almacenado básico:

--Creando el Procediemiento almacenado.
CREATE PROCEDURE dbo.ObteniendoUsuariosDemo
AS
SELECT * FROM DEMO_USUARIOS ORDER BY nombre,apellidos
GO
--Ejecutando el Procedimiento almacenado.
EXEC dbo.ObteniendoUsuariosDemo;
GO
--Mostrando la definición del Procedimiento almacenado.
EXEC sp_helptext ObteniendoUsuariosDemo;
GO

En el batch de T-SQL anterior podemos observar que:

a. Estamos creando un procedimiento almacenado.

image

b. Ejecutando el procedimiento almacenado.

image

c. Mostrando la definición del procedimiento almacenado.

image

image 

Ahora vamos a CIFRAR (Encriptar) el procedimiento almacenado aplicando un ALTER PROCEDURE en combinación con la clausula WITH ENCRYPTION como se muestra en el siguiente ejemplo:

ALTER PROCEDURE dbo.ObteniendoUsuariosDemo
WITH ENCRYPTION
AS
SELECT * FROM DEMO_USUARIOS ORDER BY nombre,apellidos
GO

d. Modificando el procedimiento almacenado para el cifrado de seguridad.

image 

Es importante mencionar que al aplicar “WITH ENCRYPTION” no podrá tener acceso a la definición del procedimiento almacenado, ni podrá modificar al código del mismo, así que cuando aplique el cifrado debe de estar completamente seguro de tener guardado el código con el que creo dicho procedimiento almacenado.

e. Ejecutando el procedimiento almacenado CIFRADO (funciona de manera similar al creado de manera no cifrada).

image

f. Consultando la definición del procedimiento almacenado cifrado.

image

image

g. Tratando de modificar el procedimiento cifrado.

image

Bueno, espero les sea de ayuda, espero sus comentarios, dudas o sugerencias, por favor apóyenme botando por mi blog en la categoría de SQL Server en www.blogit.ms

    • Jorge
    • 4/12/09

    Esto también puede funcionar para SQL 2005???

    • psykrest
    • 8/12/09

    Hola Jorge,sí en escencia debería de funcionar.

    • Issac Garcia
    • 11/01/10

    Hola,
    un favor, podrias cambiar del ejemplo el mail de torito(at)gmail(dot)com? ya que los bots para buscar mails y enviar spam podrian utilizarlo, y el correo de torito(at)gmail(dot)com es mio.
    Te lo agradeceré.
    Saludos

    • Jibal
    • 23/01/10

    Gracias por el ejemplo tan explícito.
    Sabes si habrá forma de que a la encriptación se le aplique algún password? para que luego haya forma de recuperar el código con el password dado?

    • ana
    • 2/02/10

    y como puedo descifrarlo, si es que no guarde una copia de mi sp

    • psykrest
    • 6/02/10

    Hola Issac, si claro, lo puedo cambiar, desiculpa la tardanza pero no había tenido tiempo de revisar el blog.

    • psykrest
    • 6/02/10

    Hola ana, es una de las desventajas de usar ese método, si no tienes un respaldo, da por hecho que debes empezar a crear de nuevo tu SP, aunque talvez en la red haya una manera de descifrarlo. Saludos.

  1. Se puede descifrar simplemente haciendo un ALTER al SP, quitando la directiva WITH ENCRIPTION:

    ALTER PROCEDURE dbo.ObteniendoUsuariosDemo
    –WITH ENCRYPTION
    AS
    SELECT * FROM DEMO_USUARIOS ORDER BY nombre,apellidos
    GO

  2. Beneficial!!! Bookmarked this page that has this extremely good facts. Will come back to see if there are any updates. You, the author, are a master. Thanks

    • Rodrigo Pito
    • 28/09/10

    como puedo reemplazar el SP encriptado sin mostrar el codigo fuente en una BD arrendada. depronto con un paquete o un ejecutable

  3. Esto es lo que buscamos pero el problema es que admin puede ver el contenido, y puede ser descencriptado, lo interesante seria encriptarlo seguro, o al menos ocfuscarlo

    • Luis Fernando Forero
    • 16/12/11

    No, el usuario admin(sa) tampoco puede desencriptarlo ya que el tampoco conoce la base de datos.

    Es decir si yo corro unscript de mi bd o restauro una mi BD con la encripcion en los procedimientos almacenados el usuario administrador(sa) tampoco deberia podria ver los procedimientos.

    Esto funcionaria muy bien mientras que yo no le dejara el script de la base de datos al (SA)

    • tu_saabes
    • 3/05/12

    como puedo desemcryptar un store Procedure

    • Luis
    • 29/05/13

    @Lentucky
    Reemplazar por otro, pero no con el codigo original, alteras el SP con 1 liea select y si tiene 1000 lineas y no las conoces ¿que pasa?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: