加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:13:26 所属栏目:MsSql教程 来源:网络整理
导读:我有一个使用WITH ENCRYPTION选项加密的存储过程.现在我要解密那个程序.我已经尝试了一个名为“Decryptsp2K”的存储过程,该过程在此版本的 http://forums.asp.net/t/1516587.aspx/1中为SQL 2000提供 但它会删除我的存储过程,而不是解密它. 有没有办法在SQL Se
我有一个使用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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读