我有一个使用WITH ENCRYPTION选项加密的存储过程。现在我想解密该过程。我已经尝试过一个名为“Decryptsp2K”的存储过程,该过程在此论坛中为 SQL 2000 提供:http://forums.asp.net/t/1516587.aspx/1
但它删除了我的存储过程,而不是解密它。
有没有办法解密 SQL Server 2008 中的存储过程?
SQL Server Pro 文章 “解密 SQL Server 对象” 在 SQL Server 2008 中仍然有效。
您需要通过 DAC 连接。请参阅下载中的文件“解密 SQL 2005 存储过程、函数、触发器、views.sql”。
只是总结一下它为以下存储过程定义执行的步骤
CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
imageval
中的 sys.sysobjvalues
列检索加密的对象文本并将其存储在变量 @ContentOfEncryptedObject
@ObjectDataLength
计算 DATALENGTH(@ContentOfEncryptedObject)/2
。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 to @ObjectDataLength
并使用以下 XOR
计算一次解密一个字符的定义。
NCHAR(
UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
(
UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
)
)
更新
Paul White 写了一篇非常好的文章,详细介绍了 为什么上面的方法有效,这给出了一种不可行的替代方法 依赖于改变对象:
的内部WITH ENCRYPTION
如果您想解密过程或任何其他加密对象,请查看ApexSQL Decrypt。
它是一个免费的独立工具,可以选择将其集成到 SSMS、预览原始 DDL 脚本以及创建更改或创建解密脚本。
通过独立工具,您可以连接到多个服务器并一次解密多个对象。
dbForge SQL Decryptor 是另一个可以在这种情况下帮助您的工具。
许多旧工具不再适用于 SQL Server 2005+。请注意,您必须使用
Dedicated Admin Connection
快速搜索会显示几个选项。
解密SQL SERVER的存储过程
您可以使用第三方工具来解密您的加密存储过程。
下载该工具-:它是免费软件
https://www.devart.com/dbforge/sql/sqldecryptor/download.html
dbForge Sql Decryptor帮助我解密了加密的存储过程。 详情请参阅这里
我的想法是否正确,一旦加密文件,就可以解密它?您肯定不需要第三方工具来查看它吗?