it-swarm.asia

Cara melihat tampilan terenkripsi atau prosedur tersimpan

Saya sedang mengerjakan basis data pihak ketiga.

Ketika saya mencoba melihat definisi tampilan dengan mengklik kanan, CREATE TO lalu ke NEW QUERY EDIT WINDOW, Saya mendapat pesan kesalahan:

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

27
goofyui

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.

12
michristofides

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 (mis. 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.

18
Sebastian Meine

Teks modul dienkripsi menggunakan RC4 stream cipher.

Kunci inisialisasi RC4 dihitung dari hash SHA-1 :

  • Keluarga database GUID (dari sys.database_recovery_status)
    Dikonversi dari uniqueidentifier ke binary (16)
  • ID objek modul (dari tampilan katalog)
    Dikonversi dari integer ke little-endian binary (4)
  • Sub-ID objek modul
    Dikonversi dari smallint ke little-endian binary (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:

The Internal of WITH ENCRYPTION

14
Paul White 9

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

admin:Your_Servername

Anda dapat menemukan langkah-langkah lengkap yang diperlukan di jawaban pada Stack Overflow by Martin Smith .

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

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

12
Kin Shah

Jika Anda ingin melihat pratinjau skrip DDL asli atau mendekripsi objek terenkripsi, Anda dapat memeriksa 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

8
McRobert

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 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.

0
Aaron Hurst