Ich arbeite an einer Drittanbieter-Datenbank.
Wenn ich versuche, die Definition einer Ansicht durch Klicken mit der rechten Maustaste anzuzeigen, CREATE TO
und dann zu NEW QUERY EDIT WINDOW
, wird eine Fehlermeldung angezeigt:
Diese Eigenschaft ist für dieses Objekt möglicherweise nicht vorhanden oder kann aufgrund unzureichender Zugriffsrechte nicht abgerufen werden. Der Text ist verschlüsselt.
-- Encrypted text
Antworten:
Ein weiteres Drittanbieter-Tool, mit dem Sie verschlüsselte Objekte im laufenden Betrieb entschlüsseln können, ist die SQL-Eingabeaufforderung von Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features
Bewegen Sie den Mauszeiger über die gespeicherte Prozedur, um das entschlüsselte Erstellungsskript anzuzeigen.
Haftungsausschluss: Dieses Tool ist kommerziell (mit einer 14-tägigen kostenlosen Testversion) und ich arbeite für Red Gate.
quelle
Ich habe eine ziemlich detaillierte Beschreibung zu diesem Problem hier .
Kurz gesagt, das Objekt ist nicht wirklich verschlüsselt, sondern verschleiert. Daher können wir das Original zurückholen. Die Methode ist etwas umständlich, besteht aber aus folgenden Schritten:
Wählen Sie den verschleierten Code wie folgt aus:
Ersetzen Sie das Objekt durch ein anderes Objekt mit demselben Namen, derselben object_id und derselben Länge in Bytes (z. B. mit
ALTER PROCEDURE
).Das gibt Ihnen den ursprünglichen Code. Wie Kin bereits erwähnt hat, kann dies jedoch Unterstützung und sogar rechtliche Auswirkungen haben. Fragen Sie daher zunächst Ihren Anwalt.
quelle
Der Modultext wird mit einer RC4- Stream-Verschlüsselung verschlüsselt .
Der RC4-Initialisierungsschlüssel wird aus dem SHA-1- Hash von:
Von uniqueidentifier in binary konvertiert (16)
Von Ganzzahl in Little-Endian- Binär (4) konvertiert.
des Moduls. Von Smallint in Little-Endian- Binär (2) konvertiert .
Die Objekt-Sub-ID des Moduls lautet:
Ein entsprechend privilegierter Benutzer kann das Modul dann entschlüsseln, indem er:
Weitere Details und eine vollständige Code-Implementierung in meinem Artikel:
Die Interna von
WITH ENCRYPTION
quelle
Sie können über die Dedicated Administrator Connection (DAC) eine Verbindung zu SQL Server herstellen und dann den SQL-Text der gespeicherten Prozedur anzeigen. Stellen Sie eine Verbindung zum DAC her, indem Sie Folgendes verwenden:
Die vollständigen Schritte in dieser Antwort finden Sie unter Stack Overflow von Martin Smith .
Eine andere Alternative ist die Verwendung einiger Skripts von Drittanbietern, wie in Entschlüsseln von verschlüsselten gespeicherten Prozeduren, Ansichten und Funktionen in SQL Server 2005, 2008 und R2 beschrieben
Als Randnotiz : Wenn es sich um eine Datenbank eines Drittanbieters handelt und Sie dies auf Anfrage tun, wird der Anbieter dies unterstützen? Es kann einen guten Grund geben, die SPs oder Ansichten zu verschlüsseln. Es ist wahrscheinlich besser, ein Backup zu machen und dann damit herumzuspielen.
quelle
Wenn Sie eine Vorschau des ursprünglichen DDL-Skripts anzeigen oder ein verschlüsseltes Objekt entschlüsseln möchten, können Sie ApexSQL Decrypt auschecken
Es ist ein kostenloses eigenständiges Tool mit der Option, es in SSMS zu integrieren und eine Vorschau des ursprünglichen DDL-Skripts anzuzeigen. Außerdem können Sie Objekte, die sich auf mehreren Servern befinden, in einer Runde entschlüsseln. Ein weiteres Tool, das Ihnen helfen kann, ist dbForge SQL Decryptor
quelle
Eine Methode, die ich oft verwende, um mehrere gespeicherte Prozeduren gleichzeitig zu entschlüsseln ...
Verwenden Sie SQL Compare von RedGate und vergleichen Sie Ihre Datenbank mit einer leeren Datenbank (oder jede Datenbank, von der Sie wissen, dass sie nicht über die gespeicherten Prozeduren verfügt). Erstellen Sie ein Bereitstellungsskript und kopieren Sie es in SSMS. Suchen und ersetzen Sie WITH ENCRYPTION durch Leerzeichen. Ändern Sie dann das CREATE PROCEDURE in ALTER PROCEDURE. Führen Sie das RedGate-Skript für die ursprüngliche Datenbank aus, und Sie haben die Verschlüsselung aller gespeicherten Prozeduren entfernt.
Ich hatte eine Datenbank mit über 400 gespeicherten Prozeduren, und obwohl SQL Prompt praktisch ist, hat es sich nicht gelohnt, mit der rechten Maustaste zu klicken, zu kopieren und gegen über 400 gespeicherte Prozeduren einzufügen. Mit RedGate SQL Compare konnte ich die Verschlüsselung meiner über 400 gespeicherten Prozeduren in ungefähr 10 Minuten entfernen.
quelle