webentwicklung-frage-antwort-db.com.de

So entschlüsseln Sie gespeicherte Prozeduren in SQL Server 2008

Ich habe eine gespeicherte Prozedur, die mit der Option WITH ENCRYPTION verschlüsselt wird. Jetzt möchte ich diesen Vorgang entschlüsseln. Ich habe bereits eine gespeicherte Prozedur namens "Decryptsp2K" ausprobiert, die in diesem Forum für SQL 2000 angegeben ist: http://forums.asp.net/t/1516587.aspx/1

Es löscht jedoch meine gespeicherte Prozedur, anstatt sie zu entschlüsseln.

Gibt es eine Möglichkeit, eine gespeicherte Prozedur in SQL Server 2008 zu entschlüsseln?

17

Der SQL Server Pro-Artikel "Entschlüsseln von SQL Server-Objekten" funktioniert weiterhin in SQL Server 2008.

Sie müssen sich über den DAC verbinden. Siehe die Datei "Gespeicherte Prozeduren, Funktionen, Trigger, views.sql von SQL 2005 entschlüsseln" in the download

Fassen Sie einfach die Schritte zusammen, die für die folgende Definition einer gespeicherten Prozedur ausgeführt werden

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. Ruft den verschlüsselten Objekttext aus der Spalte imageval in sys.sysobjvalues ab und speichert ihn in einer Variablen @ContentOfEncryptedObject
  2. Berechnet @ObjectDataLength aus DATALENGTH(@ContentOfEncryptedObject)/2.
  3. Erzeugt eine ALTER PROCEDURE-Anweisung, die mit dem --Zeichen auf die richtige Länge aufgefüllt wird (in diesem Fall also ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------).
  4. Führt die Anweisung ALTER aus, ruft die verschlüsselte Version von sys.sysobjvalues ab und speichert diese in der Variablen @ContentOfFakeEncryptedObject und macht dann die Änderung rückgängig.
  5. Erzeugt eine CREATE PROCEDURE-Anweisung, die mit dem --Zeichen auf die richtige Länge aufgefüllt wird (in diesem Fall also CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS-----------). Dies wird in der Variablen @ContentOfFakeObject gespeichert.

Anschließend durchläuft es für @i = 1 to @ObjectDataLength eine Schleife und entschlüsselt die Definition zu einem Zeitpunkt mit der folgenden XOR-Berechnung.

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

UPDATE

Paul White hat einen sehr schönen Artikel geschrieben, der auf .__ eingeht. Warum das Obige funktioniert, und das gibt eine alternative Methode, die nicht sich darauf verlassen, das Objekt zu verändern: Die Interna von WITH ENCRYPTION

22
Martin Smith

Wenn Sie eine Prozedur oder ein anderes verschlüsseltes Objekt entschlüsseln möchten, checken Sie ApexSQL Decrypt aus.

Es ist ein kostenloses Standalone-Tool mit der Option, es in SSMS zu integrieren, eine Vorschau des ursprünglichen DDL-Skripts anzuzeigen und Änderungs- oder Erstellungs-Entschlüsselungsskripts zu erstellen.

Mit einem Standalone-Tool können Sie eine Verbindung zu mehreren Servern herstellen und mehrere Objekte gleichzeitig entschlüsseln.

dbForge SQL Decryptor ist das andere Tool, das Ihnen auch in diesem Fall helfen kann.

6
LopesC

Viele ältere Tools funktionierten nicht mehr mit SQL Server 2005+. Beachten Sie, dass Sie den Dedicated Admin Connection verwenden müssen.

Eine Schnellsuche zeigt mehrere Optionen. 

3
gbn

Gespeicherte Prozedur von SQL SERVER entschlüsseln

Sie können ein Drittanbieter-Tool zum Entschlüsseln Ihrer verschlüsselten gespeicherten Prozedur verwenden.

Laden Sie dieses Tool herunter: Es ist Freeware

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

1
Ankit Bhalala

dbForge Sql Decryptor hat mir geholfen, die verschlüsselte gespeicherte Prozedur zu entschlüsseln . Details sind verfügbar hier

0