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?
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'
imageval
in sys.sysobjvalues
ab und speichert ihn in einer Variablen @ContentOfEncryptedObject
@ObjectDataLength
aus DATALENGTH(@ContentOfEncryptedObject)/2
.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------------
).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.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
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.
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.
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
dbForge Sql Decryptor hat mir geholfen, die verschlüsselte gespeicherte Prozedur zu entschlüsseln . Details sind verfügbar hier