我有一个使用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 连接。请查看下载页面中的文件“Decrypt SQL 2005 stored procedures, functions, triggers, 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 to @ObjectDataLength
并使用以下XOR
计算每个字符逐个解密定义。
NCHAR(
UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
(
UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
)
)
更新
Paul White 写了一篇很好的文章详细介绍了为什么上述方法可行,并提供了一种不依赖于修改对象的替代方法:WITH ENCRYPTION 的内部机制
许多老工具已经无法与SQL Server 2005+兼容。请注意您必须使用“专用管理员连接”。
快速搜索显示有几个选项。
解密 SQL SERVER 存储过程
您可以使用第三方工具来解密已加密的存储过程。
下载该工具:它是免费软件。
https://www.devart.com/dbforge/sql/sqldecryptor/download.html