但它会删除我的存储过程,而不是解密它.
有没有办法在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,1)) ^ UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject,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