2011-10-06 213 views

回答

21

的SQL服務器專業文章"Decrypt SQL Server Objects"仍然工作在SQL Server 2008中

您需要通過DAC進行連接。請參閱the download中的文件「Decrypt SQL 2005存儲過程,函數,觸發器,views.sql」。

只是爲了總結的步驟,它執行用於以下存儲過程定義

CREATE PROC dbo.myproc 
WITH ENCRYPTION 
AS 
SELECT 'FOO' 
  1. 檢索從imagevalsys.sysobjvalues加密的對象文本並把它存儲在變量@ContentOfEncryptedObject
  2. 計算@ObjectDataLengthDATALENGTH(@ContentOfEncryptedObject)/2
  3. 生成一個ALTER PROCEDURE語句填充出到正確的長度與-字符(因此在這種情況下ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------
  4. 執行給ALTER語句,從sys.sysobjvalues並存儲在變量@ContentOfFakeEncryptedObject然後回滾變化檢索加密版本。
  5. 使用-字符(因此在本例中爲CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS-----------)生成填充爲正確長度的CREATE PROCEDURE語句。這被存儲在變量@ContentOfFakeObject

然後它通過循環爲@i = 1 to @ObjectDataLength和解密定義一個字符在使用以下XOR計算的時間。

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

UPDATE

保羅·懷特寫了一個非常漂亮的文章說進入細節上 爲什麼上面的作品,並給出了不替代方法 依靠改變對象:The Internals of WITH ENCRYPTION

+0

可以請您指導我運行哪個腳本來解密我的SP。它來自「解密SQL 2005存儲過程,函數,觸發器,views.sql」嗎? –

+0

謝謝,我使用DAC運行該腳本,它對我來說工作得很好。 –

+2

不錯。我沒有看得太深。 – gbn

3

許多舊的工具停止使用SQL Server 2005+。請注意,您必須使用Dedicated Admin Connection

快速搜索會顯示幾個選項。

+0

我認爲這是所有付費版本,不是免費的。我從http://www.elitude.net/鏈接檢查瞭解密器。 –

+0

@Upendra Chaudhari:可能只會爲那裏的應用付費。這一切都改變了SQL Server 2005 – gbn

+0

感謝您的支持。 –

5

如果要解密程序或任何其他的加密的物體,請ApexSQL Decrypt

它是一個免費的獨立工具,可以將它集成到SSMS中,預覽原始DDL腳本,並創建更改或創建解密腳本。

從獨立工具中,您可以連接到多個服務器並一次解密多個對象。

dbForge SQL Decryptor是另一種工具,可以幫助你在這種情況下。

相關問題