Introducción
En un artículo previo, les hablé de lo fácil que es desencriptar un procedimiento almacenado creado con la opción WITH ENCRYPTION en SQL Server.
Existen varias herramientas de software que permiten desencriptar los procedimientos almacenados con el cifrado que tiene por defecto SQL Server.
En esta ocasión, vamos a utilizar una herramienta que nos permite cifrar los procedimientos almacenados de manera sencilla y segura con SQL Shield.
Si queremos proteger nuestra propiedad intelectual de los procedimientos almacenados, es necesario utilizar esta herramienta u otras similares para proteger nuestro código T-SQL.
Probando SQL Shield
Démosle una mirada a la herramienta. Tenemos este procedimiento almacenado:
create procedure pedro
as
SELECT [xserver_name]
,[xdttm_ins]
,[xdttm_last_ins_upd]
,[xfallback_low]
,[xfallback_drive]
,[low]
,[high]
,[status]
,[name]
,[phyname]
FROM [master].[dbo].[spt_fallback_dev]
Vamos a encriptarlo usando SQL Shield. Usted puede descargarlo aquí.
Una vez instalado, abra el SQL Shield GUI.
Expanda el servidor y expanda la base de datos donde está el procedimiento almacenado que se desea encriptar. Seleccione el procedimiento almacenado, seleccione y presione el botón para encriptar:
La encriptación que recomendamos es el SQL Shield. Puede utilizar la encriptación por defecto de SQL Server. Sin embargo, como ya dijimos, no es muy seguro este método. Luego presione el botón Start para iniciar la encriptación:
En el SQL Server Management Studio, presione el botón derecho sobre el procedimiento almacenado y seleccione la opción para crear un script en un archivo, una nueva ventana de consultas, en el portapapeles o mandar al agente de SQL Server como un trabajo:
Bajo cualquiera de las opciones usted recibirá este mensaje. Como puede ver, no se puede ver el código ahora:
Ahora vamos a hacer una consulta a las bases de datos sistema. Esta consulta muestra el procedimiento almacenado llamado pedro, el nombre, y el código del procedimiento almacenado (definición):
SELECT DISTINCT
o.name,
m.definition
FROM sys.sql_modules m
INNER JOIN
sys.objects o
ON m.object_id = o.object_id
WHERE o.name='pedro';
Si vemos los resultados de la consulta mostramos que el código muestra el valor NULL (Nulo):
Conclusiones
Si usted trata de decriptar los procedimientos cifrados con SQL Shield, utilizando herramientas de cifrado, no podrá hacerlo. Con SQL Server, usted garantiza tener procedimientos almacenados seguros.
Referencias