Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So entschlüsseln Sie gespeicherte Prozeduren in SQL Server 2008

Der SQL Server Pro-Artikel "SQL Server-Objekte entschlüsseln" funktioniert immer noch in SQL Server 2008.

Sie müssen sich über den DAC verbinden. Siehe die Datei „Decrypt SQL 2005 Stored Procedures, Functions, Triggers, Views.sql“ in der Download .

Nur um die Schritte zusammenzufassen, die es für die folgende Definition gespeicherter Prozeduren ausführt

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

Es wird dann für @i = 1 to @ObjectDataLength durchgeschleift und entschlüsselt die Definition zeichenweise unter Verwendung des folgenden XOR Berechnung.

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