Apakah ada cara cepat untuk menemukan semua kolom di SQL Server 2008 R2 yang dienkripsi / memiliki data terenkripsi?
Saya perlu membatalkan data di semua kolom terenkripsi di server pengembangan (sesuai dengan aturan bisnis kami). Saya tahu sebagian besar kolom karena kami menggunakannya secara teratur, tetapi saya ingin teliti dan saya juga ingin dapat membuktikan bahwa saya telah menemukan semuanya.
Saya telah mencari di web, mencari di INFORMATION_SCHEMA dan memeriksa DMV yang saya pikir akan berguna dan juga sys.columns dan sys.objects - tetapi sejauh ini tidak berhasil.
Jawaban:
Dengan asumsi Anda berbicara tentang data yang dienkripsi dengan kunci SQL Server, ada cara untuk menemukan kolom ini.
The
Key_name()
Fungsi akan mengembalikan nama kunci yang digunakan untuk enkripsi untuk itu nilai tertentu dan akan kembali NULL jika tidak ada sesuatu yang dienkripsi dengan "dikenal" kunci (pihak ke-3, atau sederhana tidak dienkripsi).Dengan pengetahuan itu, kita dapat menguji setiap kolom untuk melihat apakah mengandung setidaknya satu baris yang memiliki nilai varbinary yang mengembalikan nama kunci
fungsionalitas key_name ()
hasil:
hasil:
Cara menerapkannya untuk menemukan kolom terenkripsi
hasil:
sumber
Masalah dengan enkripsi level sel adalah kolom itu sendiri tidak benar-benar dienkripsi, itu adalah data yang terkandung dalam kolom itu. Kolom itu sendiri hanyalah kolom varbinary (karena itu yang diperlukan) dan dapat berisi data yang sepenuhnya dapat dibaca. Penggunaan
ENCRYPTBY*
danDECRYPTBY*
fungsi yang benar-benar membuat data terenkripsi.Anda bisa mulai dengan hanya menanyakan tampilan sys.columns untuk semua kolom yang varbinary:
Jika tidak, Anda harus meninjau kode Anda untuk mengidentifikasi di mana fungsi enkripsi / dekripsi digunakan:
sumber
Jalankan kueri di bawah ini pada DB tertentu
Sedikit berubah dari
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ca9d8360-5d7e-4de1-abe6-ce1afda595a9/how-to-find-which-table-columns-are-encrypted?forum=sqlsecurity
sumber
Anda dapat menemukan kolom yang dienkripsi dengan kunci \ sertifikat dengan mencari semua kolom varbinary dan memeriksa kunci enkripsi dengan fungsi KEY_NAME.
Namun, proses ini agak mahal dan memakan waktu. Jika Anda perlu menemukan kolom ini secara teratur, saya sarankan "memberi tag" pada kolom dengan properti yang diperluas. Kita dapat membangun solusi Edward Dortland dan "memberi tag" pada kolom-kolom yang ditemukan dengan properti diperluas seperti dienkripsi, kunci enkripsi, dan kode enkripsi.
Kemudian kita dapat dengan mudah menemukan kolom terenkripsi dengan mencari properti yang diperluas.
sumber