如何在SQL Server 2008中解密存储过程

我有一个使用WITH ENCRYPTION选项加密的存储过程.现在我要解密那个程序.我已经尝试了一个名为“Decryptsp2K”的存储过程,该过程在此版本的http://forums.asp.net/t/1516587.aspx/1中为SQL 2000提供

但它会删除我的存储过程,而不是解密它.

有没有办法在SQL Server 2008中解密存储过程?

SQL Server Pro文章“Decrypt SQL Server Objects”仍然可以在SQL Server 2008中使用.

您需要通过DAC连接.请参阅the download中的“解密SQL 2005存储过程,函数,触发器,views.sql”文件.

只是为了总结它为以下存储过程定义执行的步骤

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'

>从sys.sysobjvalues中的imageval列检索加密对象文本,并将其存储在变量@ContentOfEncryptedObject中
>从DATALENGTH(@ContentOfEncryptedObject)/ 2计算@ObjectDataLength.
>使用 – 字符生成一个填充到正确长度的ALTER PROCEDURE语句(因此在这种情况下为ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS ————)
>执行ALTER语句,从sys.sysobjvalues检索加密版本,并将其存储在变量@ContentOfFakeEncryptedObject中,然后回滚更改.
>使用 – 字符生成一个CREATE PROCEDURE语句,填充到正确的长度(因此在这种情况下为CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS ———–).这被存储在变量@ContentOfFakeObject中

然后,将@i = 1循环到@ObjectDataLength,并使用以下XOR计算一次将定义解密为一个字符.

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

UPDATE

Paul White has written a very nice article that goes into details on
why the above works, and that gives an alternate method that doesn’t
rely on altering the object: 07002

代码日志版权声明:
翻译自:http://stackoverflow.com/questions/7670636/how-to-decrypt-stored-procedure-in-sql-server-2008

转载注明原文:如何在SQL Server 2008中解密存储过程