Jak wyświetlić zaszyfrowany widok lub procedurę przechowywaną

27

Pracuję na bazie danych stron trzecich.

Gdy próbuję wyświetlić definicję widoku, klikając prawym przyciskiem myszy, CREATE TOa następnie NEW QUERY EDIT WINDOW, pojawia się błąd:

Ta właściwość może nie istnieć dla tego obiektu lub może nie być możliwa do odzyskania z powodu niewystarczających praw dostępu. Tekst jest zaszyfrowany.

goofyui
źródło
W razie potrzeby można również uruchomić śledzenie profilowania SQL i uchwycić, co SP SP robi w ten sposób.
Pimp Juice IT
Czy możliwe jest uzyskanie zaszyfrowanego tsql poprzez profiler sql? @PimpJuiceIT
wenzzzel
@wenzzzel Wydaje mi się, że tak, ale nie pamiętam, aby powiedzieć to ze 100% dokładnością, ale wierzę, że w przeszłości z zaszyfrowanym SP, uruchomiłem śledzenie profilera, aby zobaczyć, co było potrzebne. W tej chwili nie obsługuję żadnych środowisk, w których mogę to potwierdzić, ale wierzę, że możesz zobaczyć, co działa ze śledzeniem profilu, nawet jeśli pochodzi on z zaszyfrowanego procesu.
Pimp Juice IT
Okej, nie jestem tego taki pewien, bo dostaję tylko-- Encrypted text
wenzzzel

Odpowiedzi:

12

Innym narzędziem innej firmy, którego można użyć do odszyfrowania zakodowanych obiektów w locie, jest monit SQL Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features

Po najechaniu myszką na procedurę przechowywaną zobaczysz odszyfrowany skrypt tworzenia.

Zastrzeżenia: to narzędzie jest komercyjne (z 14-dniową bezpłatną wersją próbną) i pracuję dla Red Gate.

Michał
źródło
18

Mam dość szczegółowy opis o tym problemie tutaj .

Krótko mówiąc, obiekt nie jest tak naprawdę zaszyfrowany, ale raczej zaciemniony. Dlatego możemy odzyskać oryginał. Metoda jest trochę zaangażowana, ale składa się z następujących kroków:

  1. Połącz się z instancją za pomocą dedykowanego połączenia administracyjnego
  2. Wybierz zaciemniony kod w ten sposób:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
    
  3. Zastąp obiekt innym, który ma tę samą nazwę identyczny identyfikator_obiektu i taką samą długość w bajtach (np. Używając ALTER PROCEDURE)

  4. Pobierz nowo zaciemniony kod w taki sam sposób jak powyżej
  5. XOR trzy wartości razem (zaciemniony oryginał, zamiennik i zaciemniony zamiennik)

To da ci oryginalny kod. Jednak, jak wspomniano Kin, może to być wsparcie, a nawet konsekwencje prawne, dlatego najpierw skonsultuj się z prawnikiem.

Sebastian Meine
źródło
14

Tekst modułu jest szyfrowany za pomocą szyfru strumieniowego RC4 .

Klucz inicjalizacji RC4 jest obliczany na podstawie skrótu SHA-1 :

  • GUID rodzina bazy danych (z sys.database_recovery_status )
    Budynek z uniqueidentifier do binarnego (16)
  • Identyfikator obiektu modułu (z widoków katalogu)
    Przekształcony z liczb całkowitych na binarne little-endian (4)
  • Sub-ID obiektu modułu
    Przekształcony z smallint na binarny little-endian (2) .

Sub-ID obiektu modułu to:

  • 1 dla nienumerowanej procedury składowanej; lub
  • Numer procedury dla (nieaktualnej) numerowanej procedury składowanej; lub
  • 0 w przeciwnym razie.

Odpowiednio uprzywilejowany użytkownik może następnie odszyfrować moduł poprzez:

  1. Uzyskiwanie zaszyfrowanego pliku binarnego z sys.sysobjvalues (przy użyciu DAC)
  2. Obliczanie klucza RC4 jak opisano powyżej
  3. Uruchamianie znanego standardowego algorytmu RC4 na pliku binarnym
  4. Konwersja wyniku z pliku binarnego na nvarchar (maks.)

Więcej szczegółów i pełne wdrożenie kodu w moim artykule:

The Internals of WITH ENCRYPTION

Paul White mówi GoFundMonica
źródło
Myślę, że jest to najprostsze, niekomercyjne podejście, w którym zainstalowanie narzędzia innej firmy nie jest wykonalnym rozwiązaniem.
John Eisbrener
12

Możesz połączyć się z SQL Server za pomocą Dedicated Administrator Connection (DAC), a następnie wyświetlić tekst SQL procedury składowanej. Podłącz do DAC za pomocą:

admin:Your_Servername

Pełne kroki potrzebne w tej odpowiedzi można znaleźć na stronie Przepełnienie stosu autorstwa Martina Smitha .

Inną alternatywą jest użycie niektórych skryptów stron trzecich, jak wspomniano w Deszyfrowaniu zaszyfrowanych procedur przechowywanych, widoków, funkcji w SQL Server 2005, 2008 i R2

Na marginesie - jeśli jest to baza danych strony trzeciej i jeśli robisz to na prod, to czy sprzedawca ją obsługuje? Może istnieć dobry powód do szyfrowania SP lub widoków. Prawdopodobnie lepiej jest zrobić kopię zapasową, a następnie bawić się nią.

Kin Shah
źródło
8

Jeśli chcesz wyświetlić podgląd oryginalnego skryptu DDL lub odszyfrować zaszyfrowany obiekt, możesz sprawdzić Deszyfrowanie ApexSQL

To bezpłatne, samodzielne narzędzie z opcją integracji z SSMS, podgląd oryginalnego skryptu DDL. Ponadto możesz odszyfrować obiekty znajdujące się na wielu serwerach w jednej turze. Kolejnym narzędziem, które może ci pomóc, jest dbForge SQL Decryptor

McRobert
źródło
0

Metoda, której często używam do odszyfrowywania kilku procedur przechowywanych jednocześnie ...

Użyj narzędzia SQL Compare firmy RedGate i porównaj bazę danych z pustą bazą danych (lub dowolną znaną bazą danych, która nie będzie miała procedur przechowywanych). Utwórz skrypt wdrażania i skopiuj do SSMS. Znajdź i zamień NA SZYFROWANIE na białe spacje. Następnie zmień opcję CREATE PROCEDURE na ALTER PROCEDURE. Uruchom skrypt RedGate w stosunku do oryginalnej bazy danych, a całe szyfrowanie procedury przechowywanej zostało usunięte.

Miałem bazę danych z ponad 400 procedurami przechowywanymi i chociaż podpowiedź SQL jest przydatna, nie warto poświęcać czasu na klikanie prawym przyciskiem, kopiowanie i wklejanie ponad 400 procedur przechowywanych. Za pomocą RedGate SQL Compare byłem w stanie usunąć szyfrowanie z moich ponad 400 procedur przechowywanych w mniej więcej 10 minut.

Aaron Hurst
źródło