SQL Server 2008 でストアド プロシージャを復号化する方法 質問する

SQL Server 2008 でストアド プロシージャを復号化する方法 質問する

WITH ENCRYPTION オプションを使用して暗号化されたストアド プロシージャがあります。このプロシージャを復号化したいと考えています。このフォーラムで SQL 2000 用に提供されている「Decryptsp2K」というストアド プロシージャを既に試しました。http://forums.asp.net/t/1516587.aspx/1

しかし、ストアド プロシージャは復号化されるのではなく、削除されます。

SQL Server 2008 でストアド プロシージャを復号化する方法はありますか?

ベストアンサー1

SQL Server Pro の記事「SQL Server オブジェクトの暗号化を解除する」SQL Server 2008 でも引き続き動作します。

DAC経由で接続する必要があります。ダウンロード

次のストアドプロシージャ定義で実行される手順を要約すると、

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、次の計算を使用して、定義を 1 文字ずつ復号化しますXOR

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

アップデート

Paul White 氏は、上記の方法がなぜ機能するのかを詳しく説明した非常に優れた記事を書いています。また、オブジェクトの変更に依存しない代替方法も紹介しています。内部構造WITH ENCRYPTION

おすすめ記事