Apakah lalu lintas jaringan dienkripsi saat menulis cadangan jarak jauh menggunakan SQL Server TDE?

9

Mereka mengatakan tidak ada yang namanya "pertanyaan bodoh", jadi begini:

Saya mengerti bahwa SQL Server Transparent Data Encryption (TDE) mengenkripsi data saat istirahat, sehingga file database Anda (.mdf) dan file cadangan Anda (.bak) dienkripsi jika seseorang membobol penyimpanan Anda dan mencuri file-file itu. Saya juga mengerti bahwa data didekripsi ketika dibaca dari disk sehingga tidak dienkripsi dalam memori (bergerak). Oleh karena itu data yang diminta oleh pengguna yang menjalankan kueri jarak jauh (pilih * dari SensitiveData) tidak akan dienkripsi saat bepergian melalui jaringan dan karenanya rentan disadap.

Jadi, dengan anggapan semua hal di atas sudah benar, berikut adalah pertanyaan bodoh saya: Jika instance SQL Server saya ada di komputer A dan cadangan basis data TDE saya dihapus ke penyimpanan di komputer jarak jauh B, apakah data operasi pencadangan dienkripsi saat bepergian dari komputer A akan ditulis ke disk di komputer B? Saya menganggap itu pasti (karena saya kira operasi enkripsi terjadi pada komputer A pertama), tetapi saya tidak dapat menemukan konfirmasi ini di salah satu dokumentasi Microsoft atau di blog. Dan juga, selama operasi pemulihan - apakah ada orang yang mencegat data yang ditransfer dari disk di komputer B untuk memulihkan database di komputer A - akankah mereka menemukan bahwa data yang bergerak dienkripsi?

SQLServerVillain
sumber
2
Ini benar-benar pertanyaan yang bagus
Shanky

Jawaban:

7

Ya, cadangan dienkripsi saat bergerak melalui jaringan karena data TDE dienkripsi pada disk, dan operasi pencadangan tidak pernah mendekripsi .

Mitos Cadangan Paul Randal :

Mitos 30-09) backup membaca data melalui buffer pool

Tidak . Subsistem cadangan membuka salurannya sendiri ke file database untuk menghindari kinerja yang hebat karena harus membaca semuanya ke dalam memori SQL Server dan kembali ke perangkat cadangan (dan juga secara efektif menyiram kumpulan buffer dalam proses). Jika Anda meminta pemeriksaan halaman-checksum, itu menggunakan sebagian kecil dari memori.

Jika halaman dimuat ke buffer pool (ruang memori "normal" yang digunakan SQL untuk me-cache tabel database dan data indeks), mereka harus didekripsi. Tetapi cadangan tidak melakukan itu, mereka hanya membuang "luasan" terenkripsi mentah (potongan 8-halaman yang berdekatan) ke tujuan cadangan Anda.

Saya dapat memperoleh konfirmasi dari Paul Randal bahwa komentarnya di atas masih relevan untuk TDE :

Cara kerjanya persis sama. Kolam buffer melakukan enkripsi kemudian menambahkan checksum halaman sebelum menulis halaman ke disk. Cadangan tidak pernah membaca melalui kumpulan buffer. Jadi ya, cadangan basis data TDE masih memiliki enkripsi. Checksum halaman divalidasi, tetapi dengan kode cadangan, bukan kode kumpulan buffer.

Dengan kata lain, jika Anda telah mengaktifkan CHECKSUM pada database, itu ditambahkan (selama operasi penulisan SQL normal) setelah enkripsi terjadi. Ini berarti bahwa proses pencadangan dapat membaca tingkat mentah (terenkripsi), memvalidasi checksum, dan menulis cadangan, semua tanpa mendekripsi data.

Ini hampir pasti alasannya (sebelum SQL 2016), mengaktifkan kompresi cadangan pada basis data dengan TDE tidak melakukan apa-apa, karena data terenkripsi tidak terlalu kompresibel :

Ini karena ketika cadangan basis data terenkripsi TDE diambil, laman basis data tidak didekripsi saat dicadangkan. Mereka dicadangkan dalam kondisi terenkripsi yang sama seperti biasanya, kemudian dikompresi . Secara alami data terenkripsi sangat unik sehingga kompresi data tidak banyak membantu terhadap data terenkripsi.

Untuk operasi pemulihan, prinsip yang sama berlaku. Cadangan terenkripsi tetap terenkripsi di seluruh jaringan, dan ditulis ke disk server yang memulihkan dalam keadaan terenkripsi. Mereka hanya didekripsi ketika database dimuat dalam memori setelah pemulihan selesai.

BradC
sumber
3

... apakah data operasi pencadangan dienkripsi saat bergerak dari komputer A untuk ditulis ke disk di komputer B?

Ya, itu didekripsi ketika memasuki kolam penyangga dan dienkripsi ketika ia pergi. Dalam situasi ini karena kita menulis ke disk, ia dienkripsi terlebih dahulu dan kemudian ditulis. Karena tulisan akan melintasi jaringan, data itu sendiri dienkripsi tetapi bagian lain dari lalu lintas jaringan tidak.

... selama operasi pemulihan ... apakah mereka akan menemukan bahwa data yang bergerak dienkripsi?

Ya, karena sama seperti di atas berlaku tetapi dalam urutan terbalik. Data dienkripsi pada disk, sedang dibaca dan ditransfer dalam keadaan terenkripsi. Kemudian ia sampai ke instance dan dimuat ke dalam buffer pool di mana ia tidak terenkripsi sebagai langkah di jalan.

Sean Gallardy
sumber
1
Saya pikir ini benar, tetapi saya tidak yakin itu benar untuk alasan yang Anda katakan. Saya berpikir bahwa CADANGAN akan mengirim EXTENTS database mentah (bukan halaman) ke disk, oleh karena itu melewati langkah dekripsi ketika mereka dimuat ke dalam memori. Saya mungkin salah, tetapi saya sedang mencari dokumentasi sekarang.
BradC
1
Menemukannya, lihat mitos Paul Randal 30-09 : "Subsistem cadangan membuka salurannya sendiri ke file database untuk menghindari kinerja yang harus membaca semua ke dalam memori SQL Server dan kembali ke perangkat cadangan". Tidak menyebutkan TDE secara khusus, tetapi jika proses pencadangan adalah salurannya sendiri, akan sia-sia untuk mendekripsi hanya untuk segera mengenkripsi ulang. Bahkan dapat memvalidasi CHECKSUMS dan / atau menerapkan kompresi tanpa mendekripsi, jika itu diaktifkan.
BradC
@BradC Saya tidak mengatakan bahwa cadangan itu sendiri akan bekerja dengan cara ini, tetapi bagaimana proses enkripsi / dekripsi bekerja dengan data lainnya. Jika ambigu saya akan mengubahnya, namun saya tidak mengatakan ini adalah cara kerja cadangan kapan saja dan di mana terjadi enkripsi / dekripsi.
Sean Gallardy
Tetapi jika proses pencadangan tidak menggunakan buffer pool, maka alasan Anda salah, bahkan jika kesimpulannya (paket cadangan dienkripsi) tepat untuk alasan yang berbeda.
BradC
@ BCR Tidak, alasannya adalah bahwa itu sudah ditulis ke disk sehingga sudah dienkripsi ... Tidak yakin bagaimana Anda mendapatkan bahwa saya menyatakan cadangan didekripsi dan kemudian dienkripsi ulang melalui BP. Saya pikir itu cukup lurus mengatakan itu sudah dienkripsi sehingga menyalin ke disk lain atau menyalinnya dari disk lain tidak mendekripsi ... Tidak yakin bagaimana Anda membingungkan ini.
Sean Gallardy