Cara melihat tampilan terenkripsi atau prosedur tersimpan

27

Saya sedang mengerjakan basis data pihak ketiga.

Ketika saya mencoba melihat definisi tampilan dengan mengklik kanan, CREATE TOdan kemudian ke NEW QUERY EDIT WINDOW, saya mendapatkan kesalahan:

Properti ini mungkin tidak ada untuk objek ini atau mungkin tidak dapat diambil karena hak akses yang tidak memadai. Teks dienkripsi.

goofyui
sumber
Jika diperlukan Anda juga bisa menjalankan jejak profiler SQL dan menangkap apa yang dilakukan SP SQL dengan cara ini juga.
Pimp Juice
Apakah mungkin untuk mendapatkan tsql terenkripsi melalui sql profiler? @PimpJuiceIT
wenzzzel
@wenzzzel Saya percaya itu adalah tetapi saya tidak ingat persis untuk memberitahu Anda dengan akurasi 100% tapi saya percaya dia melewati dengan SP terenkripsi, saya menjalankan jejak profiler untuk melihat apa yang dibutuhkan. Saya tidak mendukung lingkungan apa pun pada saat itu saya dapat mengonfirmasi hal ini tetapi saya yakin Anda dapat melihat apa yang berjalan dengan jejak profil bahkan jika itu berasal dari proses yang dienkripsi.
Pimp Juice
Oke, saya tidak begitu yakin tentang penyebab yang saya dapatkan adalah-- Encrypted text
wenzzzel

Jawaban:

12

Alat pihak ketiga lain yang dapat Anda gunakan untuk mendekripsi objek terenkripsi dengan cepat adalah Prompt SQL Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features

Dengan mengarahkan kursor ke prosedur yang tersimpan, Anda dapat melihat skrip penciptaan yang didekripsi.

Penafian: alat ini komersial (dengan uji coba gratis 14 hari) dan saya bekerja untuk Gerbang Merah.

Michael
sumber
18

Saya memiliki deskripsi yang cukup terperinci tentang masalah ini di sini .

Singkatnya, objek tidak benar-benar dienkripsi, tetapi agak dikaburkan. Karena itu kita dapat mengambil kembali yang asli. Metode ini sedikit terlibat tetapi terdiri dari langkah-langkah ini:

  1. Hubungkan ke instance menggunakan Koneksi Admin Khusus
  2. Pilih kode yang dikaburkan seperti ini:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
    
  3. Ganti objek dengan yang lain yang memiliki nama yang sama object_id yang sama dan panjang yang sama dalam byte (misalnya menggunakan ALTER PROCEDURE)

  4. Dapatkan kode yang baru dikaburkan dengan cara yang sama seperti di atas
  5. XOR ketiga nilai bersama (mengaburkan asli, penggantian dan penggantian dikaburkan)

Itu akan memberi Anda kode asli. Namun, seperti yang disebutkan Kin, mungkin ada dukungan dan bahkan implikasi hukum dengan melakukan ini jadi pastikan untuk berkonsultasi dengan pengacara Anda terlebih dahulu.

Sebastian Meine
sumber
14

Teks modul dienkripsi menggunakan cipher aliran RC4 .

Kunci inisialisasi RC4 dihitung dari hash SHA-1 dari:

  • The keluarga Database GUID (dari sys.database_recovery_status )
    Dikonversi dari uniqueidentifier ke biner (16)
  • ID objek modul (dari tampilan katalog)
    Dikonversi dari integer ke biner little-endian (4)
  • Sub-ID objek modul
    Dikonversi dari biner smallint ke little-endian (2) .

Sub-ID objek modul adalah:

  • 1 untuk prosedur tersimpan yang tidak bernomor; atau
  • Nomor prosedur untuk prosedur tersimpan bernomor (usang); atau
  • 0 sebaliknya.

Pengguna dengan hak istimewa yang sesuai kemudian dapat mendekripsi modul dengan:

  1. Memperoleh biner terenkripsi dari sys.sysobjvalues (menggunakan DAC)
  2. Menghitung kunci RC4 seperti dijelaskan di atas
  3. Menjalankan algoritma RC4 standar yang terkenal di biner
  4. Mengonversi hasil dari biner ke nvarchar (maks)

Lebih detail dan implementasi kode lengkap dalam artikel saya:

Internal dari WITH ENCRYPTION

Paul White mengatakan GoFundMonica
sumber
Saya pikir ini adalah pendekatan yang paling mudah, non-komersial, di mana menginstal alat pihak ke-3 bukan solusi yang layak.
John Eisbrener
12

Anda dapat terhubung ke SQL Server menggunakan Dedicated Administrator Connection (DAC) kemudian melihat teks sql dari prosedur tersimpan. Hubungkan ke DAC menggunakan:

admin:Your_Servername

Anda dapat menemukan langkah-langkah lengkap yang diperlukan dalam jawaban ini di Stack Overflow oleh Martin Smith .

Alternatif lain adalah menggunakan beberapa skrip pihak ketiga seperti yang disebutkan dalam mendekripsi prosedur tersimpan yang dienkripsi, tampilan, fungsi dalam SQL Server 2005, 2008, & R2

Sebagai catatan tambahan - jika ini adalah database pihak ketiga dan jika Anda melakukannya dengan paksa, akankah vendor mendukungnya? Mungkin ada alasan bagus untuk mengenkripsi SP atau tampilan. Mungkin lebih baik mengambil cadangan, lalu mengotak-atik itu.

Kin Shah
sumber
8

Jika Anda ingin melihat pratinjau skrip DDL asli atau mendekripsi objek terenkripsi, Anda dapat melihat ApexSQL Decrypt

Ini adalah alat mandiri gratis, dengan opsi untuk mengintegrasikannya ke SSMS, pratinjau skrip DDL asli. Selain itu, Anda dapat mendekripsi objek yang terletak di beberapa server sekaligus. Satu lagi alat yang dapat membantu Anda, adalah dbForge SQL Decryptor

McRobert
sumber
0

Metode yang sering saya gunakan untuk mendekripsi beberapa prosedur tersimpan sekaligus ...

Gunakan RedGate's SQL Compare dan bandingkan database Anda dengan database kosong (atau database yang Anda tahu tidak akan memiliki prosedur tersimpan). Buat skrip deploy dan salin ke SSMS. Temukan dan ganti DENGAN ENKRIPSI dengan spasi putih. Kemudian ubah PROSEDUR BUAT menjadi PROSEDUR ALTER. Jalankan skrip RedGate terhadap database asli dan Anda telah menghapus semua enkripsi prosedur tersimpan.

Saya memiliki database dengan 400+ prosedur tersimpan dan sementara SQL Prompt berguna, itu tidak layak waktu saya untuk mengklik kanan, menyalin, menempel pada 400+ prosedur tersimpan. Menggunakan RedGate SQL Compare Saya dapat menghapus enkripsi dari 400+ prosedur tersimpan saya dalam kira-kira 10 menit mulai dari selesai.

Aaron Hurst
sumber