2011-10-06 51 views
17

Tengo un procedimiento almacenado que se cifra con la opción CON ENCRIPTACIÓN. Ahora quiero descifrar ese procedimiento. Ya he probado un procedimiento almacenado llamado "Decryptsp2K" que se da para SQL 2000 en este foro: http://forums.asp.net/t/1516587.aspx/1Cómo descifrar el procedimiento almacenado en SQL Server 2008

Pero elimina mi procedimiento almacenado, en lugar de descifrarlo.

¿Hay alguna manera de descifrar un procedimiento almacenado en SQL Server 2008?

Respuesta

21

El SQL Server Pro artículo "Decrypt SQL Server Objects" todavía funciona en SQL Server 2008.

Es necesario conectar a través de la DAC. Consulte el archivo "Descifrar procedimientos almacenados de SQL 2005, funciones, desencadenadores, views.sql" en the download.

Sólo para resumir los pasos que realiza para la siguiente definición de procedimiento almacenado

CREATE PROC dbo.myproc 
WITH ENCRYPTION 
AS 
SELECT 'FOO' 
  1. recupera el texto cifrado objeto a partir de la columna de la imageval en sys.sysobjvalues y lo almacena en una variable @ContentOfEncryptedObject
  2. Calcula @ObjectDataLength desde DATALENGTH(@ContentOfEncryptedObject)/2.
  3. genera una declaración ALTER PROCEDURE acolchado a la longitud correcta con el - carácter (por lo que en este caso ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------)
  4. ejecuta la instrucción ALTER, recupera la versión encriptada de sys.sysobjvalues y tiendas que en la variable @ContentOfFakeEncryptedObject entonces se deshace el cambio .
  5. Genera una instrucción CREATE PROCEDURE rellenada a la longitud correcta con el carácter - (por lo que en este caso CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS-----------). Esto se almacena en la variable @ContentOfFakeObject

Después devuelve a través de @i = 1 to @ObjectDataLength y descifra la definición de un carácter a la vez mediante el cálculo XOR siguiente.

NCHAR(
     UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1))^
     (
      UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1))^
      UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1)) 
    ) 
    ) 

ACTUALIZACIÓN

Paul White ha escrito un muy buen artículo que entra en detalles sobre por qué las obras anteriores, y que da un método alternativo que no lo hace se basan en la modificación de la objeto: The Internals of WITH ENCRYPTION

+0

¿Puede por favor indicarme qué script debo ejecutar para descifrar mi SP? ¿es de "Descifrar SQL 2005 procedimientos almacenados, funciones, desencadenadores, views.sql"? –

+0

Gracias, había ejecutado ese script usando DAC y funciona bien para mí. –

+2

Agradable. No había mirado demasiado en esto. – gbn

3

Muchas herramientas antiguas dejaron de funcionar con SQL Server 2005+. Tenga en cuenta que debe estar utilizando el Dedicated Admin Connection

Una búsqueda rápida muestra varias opciones.

+0

Creo que son todas las versiones de pago, no gratuitas. He verificado el descifrador del enlace http://www.elitude.net/. –

+0

@Upendra Chaudhari: probablemente solo haya pagado por las aplicaciones que hay. Todo cambió con SQL Server 2005 – gbn

+0

Gracias por su apoyo. –

5

Si desea descifrar procedimiento o cualquier otro objeto cifrado, echa un vistazo a ApexSQL Decrypt.

Es una herramienta independiente y gratuita, con la opción de integrarla en SSMS, obtener una vista previa de la secuencia de comandos DDL original y crear secuencias de comandos Alter o Create decryption.

Desde una herramienta independiente, puede conectarse a varios servidores y descifrar varios objetos a la vez.

dbForge SQL Decryptor es la otra herramienta que puede ayudarlo en este caso también.

Cuestiones relacionadas