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

问题描述 投票:0回答:6

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

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

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

sql sql-server-2008
6个回答
25
投票

SQL Server Pro 文章 “解密 SQL Server 对象” 在 SQL Server 2008 中仍然有效。

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

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

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. imageval
    中的
    sys.sysobjvalues
    列检索加密的对象文本并将其存储在变量
    @ContentOfEncryptedObject
  2. 根据
    @ObjectDataLength
    计算
    DATALENGTH(@ContentOfEncryptedObject)/2
  3. 生成一个
    ALTER PROCEDURE
    语句,并使用
    -
    字符填充到正确的长度(因此在本例中为
    ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------
  4. 执行
    ALTER
    语句,从
    sys.sysobjvalues
    检索加密版本并将其存储在变量
    @ContentOfFakeEncryptedObject
    中,然后回滚更改。
  5. 生成一个
    CREATE PROCEDURE
    语句,并使用
    -
    字符填充到正确的长度(因此在本例中为
    CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS-----------
    )。这被存储在变量
    @ContentOfFakeObject

然后循环遍历

@i = 1 to @ObjectDataLength
并使用以下
XOR
计算一次解密一个字符的定义。

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

更新

Paul White 写了一篇非常好的文章,详细介绍了 为什么上面的方法有效,这给出了一种不可行的替代方法 依赖于改变对象:

WITH ENCRYPTION

的内部

6
投票

如果您想解密过程或任何其他加密对象,请查看ApexSQL Decrypt

它是一个免费的独立工具,可以选择将其集成到 SSMS、预览原始 DDL 脚本以及创建更改或创建解密脚本。

通过独立工具,您可以连接到多个服务器并一次解密多个对象。

dbForge SQL Decryptor 是另一个可以在这种情况下帮助您的工具。


3
投票

许多旧工具不再适用于 SQL Server 2005+。请注意,您必须使用

Dedicated Admin Connection

快速搜索会显示几个选项。


2
投票

解密SQL SERVER的存储过程

您可以使用第三方工具来解密您的加密存储过程。

下载该工具-:它是免费软件

https://www.devart.com/dbforge/sql/sqldecryptor/download.html


1
投票

dbForge Sql Decryptor帮助我解密了加密的存储过程。 详情请参阅这里


0
投票

我的想法是否正确,一旦加密文件,就可以解密它?您肯定不需要第三方工具来查看它吗?

© www.soinside.com 2019 - 2024. All rights reserved.