Як переглянути зашифрований перегляд або збережену процедуру


27

Я працюю над базою даних сторонніх розробників.

Коли я намагаюся переглянути визначення представлення, клацнувши правою кнопкою миші, CREATE TOа потім на NEW QUERY EDIT WINDOW, я отримую помилку:

Це властивість може не існувати для цього об’єкта або може бути недоступним через недостатні права доступу. Текст зашифрований.


Якщо потрібно, ви також можете запустити трафік SQL-профіляра і зафіксувати те, що саме SP SQL робить так.
Pimp Juice IT

Чи можна отримати зашифрований tsql через sql-профайлер? @PimpJuiceIT
wenzzzel

@wenzzzel Я вважаю, що це так, але я не пам'ятаю точно, щоб сказати тобі зі 100% точністю, але я вважаю, що він минув із зашифрованим SP, я провів профайлерський слід, щоб побачити, що потрібно. Я не підтримую жодного середовища в той момент, коли я можу це підтвердити, але я вважаю, що ви можете побачити, що працює зі слідом профілю, навіть якщо це відбувається із зашифрованого процесу.
Pimp Juice IT

Гаразд, я не дуже впевнений у тому, що я отримую-- Encrypted text
Wenzzzel

Відповіді:


12

Інший інструмент сторонніх розробників, який ви можете використовувати для розшифрування зашифрованих об'єктів на ходу, - SQL-підказка Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features

Наведення курсор на збережену процедуру дозволить вам побачити розшифрований сценарій створення.

Відмова від відповідальності: цей інструмент є комерційним (з 14-денною безкоштовною пробною версією), і я працюю в Red Gate.


18

У мене є досить докладний опис цієї проблеми тут .

Коротше кажучи, об’єкт насправді не зашифрований, а досить затуманений. Тому ми можемо отримати оригінал назад. Метод трохи задіяний, але він складається з наступних кроків:

  1. Підключіться до примірника за допомогою виділеного адміністратора
  2. Виберіть такий прихований код:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
  3. Замініть об'єкт на інший, який має те саме ім’я, той самий object_id і однакову довжину в байтах (наприклад, використовуючи ALTER PROCEDURE)

  4. Отримайте нещодавно окупований код таким же чином, як і вище
  5. XOR три значення разом (прихований оригінал, заміна та затуманена заміна)

Це дасть вам оригінальний код. Однак, як згадував Кін, у цьому можуть бути підтримка та навіть юридичні наслідки, тому обов'язково спочатку проконсультуйтеся зі своїм юристом.


14

Текст модуля шифрується за допомогою шифру потоку RC4 .

Ключ ініціалізації RC4 обчислюється з хеша SHA-1 :

  • Сім'ї баз даних GUID (від sys.database_recovery_status )
    конвертований з UniqueIdentifier в двійковий (16)
  • Ідентифікатор об'єкта модуля (з переглядів каталогів)
    Перетворений з цілого на бінарний біткойн (4)
  • Під -ідентифікатор об'єкта модуля
    Перетворюється з малого дна у маленький бініанс (2) .

Sub-ідентифікатор об'єкта модуля:

  • 1 для ненумерованої збереженої процедури; або
  • Номер процедури для (застарілої) пронумерованої збереженої процедури; або
  • 0 інакше.

Відповідно привілейований користувач може потім розшифрувати модуль:

  1. Отримання зашифрованого двійкового з sys.sysobjvalues (за допомогою DAC)
  2. Обчислення ключа RC4, як описано вище
  3. Запуск відомого стандартного алгоритму RC4 на бінарному
  4. Перетворення результату з двійкового в nvarchar (max)

Більш детальна інформація та повна реалізація коду в моїй статті:

Внутрішні WITH ENCRYPTION


Я думаю, що це найбільш простий, некомерційний підхід, коли встановлення стороннього інструменту не є можливим рішенням.
Джон Ейсбренер

12

Ви можете підключитися до SQL Server за допомогою спеціального підключення адміністратора (DAC), а потім переглянути текст sql збереженої процедури. Підключіться до ЦАП за допомогою:

admin:Your_Servername

Повні кроки, необхідні у цій відповіді, ви можете знайти у статті Stack Overflow від Martin Smith .

Іншою альтернативою є використання деяких сторонніх сценаріїв, як згадується в Розшифруванні зашифрованих збережених процедур, поглядів, функцій у SQL Server 2005, 2008 та R2

Як зауваження - якщо це база даних третіх сторін і якщо ви робите це в продажі, чи підтримуватиме її постачальник? Можливо, буде вагомий привід зашифрувати SP або представлення даних. Напевно, краще взяти резервну копію, а потім поспілкуватися з цим.


8

Якщо ви хочете переглянути оригінальний скрипт DDL або розшифрувати зашифрований об'єкт, ви можете перевірити розшифровку ApexSQL

Це безкоштовний автономний інструмент, з можливістю інтегрувати його в SSMS, попередньо переглянути оригінальний скрипт DDL. Також ви можете розшифрувати об’єкти, розташовані на декількох серверах за один виток. Ще одним інструментом, який може вам допомогти, є dbForge SQL Decryptor


0

Метод, який я часто використовую для розшифрування декількох збережених процедур одночасно ...

Використовуйте SQL RedGate Порівняйте та порівняйте вашу базу даних із порожньою базою даних (або будь-яка база даних, яку ви знаєте, не матиме збережених процедур). Створіть сценарій розгортання та скопіюйте у SSMS. Знайдіть і замініть на ВИКОНАННЯ білим пробілом. Потім змініть ПРОЦЕДУРУ СТВОРЕННЯ НА АЛЬТЕРАЦІЮ. Запустіть скрипт RedGate проти вихідної бази даних, і ви видалили всі збережені процедури шифрування.

У мене була база даних із 400+ збереженими процедурами, і хоча підказка SQL зручна, не варто було мого часу клацати правою кнопкою миші, копіювати та вставляти проти 400+ зберігаються процедур. Використовуючи RedGate SQL Порівняти, я зміг видалити шифрування з 400+ збережених процедур приблизно за 10 хвилин до початку закінчення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.