Pulihkan database ledger setelah diubah

Berlaku untuk: Pratinjau Azure SQL Database SQL Server 2022 (16.x)

Bagaimana cara memulihkan setelah perubahan terjadi?

Cara paling mudah untuk memperbaiki segala jenis perusakan adalah dengan memulihkan database ke cadangan terbaru yang dapat diverifikasi. Untuk mencapainya, Anda dapat memulihkan database ke titik waktu yang berbeda dan memverifikasi ledger menggunakan hash database sebelumnya. Titik waktu terbaru yang berhasil diverifikasi adalah titik waktu terbaru yang dijamin tidak akan diubah dan dapat digunakan untuk melanjutkan pemrosesan transaksi. Untuk alasan ini, sangat penting bagi cadangan agar cukup sering untuk sedekat mungkin dengan waktu perubahan. Penjadwalan pencadangan secara otomatis dilakukan untuk Azure SQL Database. Meskipun teknik ini sederhana, ia memiliki peringatan penting: jika ada transaksi yang dijalankan setelah perubahan terjadi, Anda perlu menerima bahwa transaksi ini akan hilang atau mereka perlu memperbaiki tabel ledger secara manual dengan memasukkan kembali informasi untuk transaksi terverifikasi dan mengolah ulang hash untuk transaksi baru ini yang terjadi setelah peristiwa perusakan pertama dalam ledger database.

Kategori perubahan

Tergantung pada jenis perubahan, ada kasus di mana Anda dapat memperbaiki ledger tanpa kehilangan data. Anda harus mempertimbangkan dua kategori peristiwa perubahan.

Perubahan tidak memengaruhi transaksi lebih lanjut

Peristiwa pengubahan memodifikasi beberapa data yang disimpan dalam ledger tetapi tidak memengaruhi transaksi lebih lanjut. Ini mungkin karena serangan terdeteksi sebelum transaksi apa pun akan beroperasi melalui data yang diubah atau karena serangan hanya memengaruhi data dengan cara yang tidak memengaruhi transaksi baru. Misalnya, jika Anda menggunakan tabel ledger untuk menyimpan detail transaksi perbankan, mengubah detail transaksi yang ada tidak berdampak pada transaksi baru, yang akan berfungsi atas saldo saat ini.

Karena pengubahan tidak memengaruhi transaksi apa pun yang terjadi setelah peristiwa perusakan, eksekusi transaksi baru dan hasil yang dihasilkan sudah benar. Berdasarkan itu, idealnya Anda harus membawa ledger ke keadaan yang konsisten tanpa memengaruhi transaksi ini.

Jika penyerang tidak mengubah ledger tingkat database, ini mudah dideteksi dan diperbaiki. Ledger database dalam keadaan konsisten dengan semua hash database yang dihasilkan, dan setiap transaksi baru yang ditambahkan ke dalamnya telah di-hash menggunakan hash yang valid dari transaksi sebelumnya. Berdasarkan itu, setiap hash database yang dihasilkan, bahkan untuk transaksi setelah perubahan terjadi, masih valid. Anda dapat mencoba mengambil payload ledger tabel yang benar untuk transaksi yang diubah dari cadangan yang masih dapat divalidasi agar aman (menggunakan validasi ledger pada mereka) dan memperbaiki database operasional dengan menimpa data yang diubah dalam ledger tabel. Ini akan membuat transaksi baru yang merekam transaksi perbaikan.

Mengubah data yang terpengaruh yang digunakan oleh transaksi lebih lanjut

Peristiwa perusakan memengaruhi data yang kemudian digunakan oleh transaksi lebih lanjut, oleh karena itu memengaruhi eksekusinya. Misalnya, dalam aplikasi perbankan di mana saldo rekening saat ini disimpan dalam tabel ledger, memodifikasi status tabel saat ini dapat menjadi bencana untuk transaksi lebih lanjut karena dapat memungkinkan transaksi baru untuk pengeluaran berlebih.

Jika penyerang mengubah ledger database, mengolah ulang hash blok untuk membuatnya konsisten secara internal (sampai diverifikasi terhadap hash database eksternal), maka transaksi dan hash database baru akan dihasilkan melalui hash yang tidak valid. Ini mengarah ke fork dalam ledger, karena hash database baru yang dihasilkan memetakan ke status tidak valid dan bahkan jika Anda memperbaiki ledger dengan menggunakan cadangan sebelumnya, semua hash database ini secara permanen tidak valid. Selain itu, karena ledger database rusak, Anda tidak dapat mempercayai detail tentang transaksi yang terjadi setelah perubahan hingga Anda memverifikasinya. Berdasarkan itu, perusakan dapat berpotensi dikembalikan dengan:

  1. Menggunakan cadangan untuk memulihkan status untuk transaksi yang dirusak.
  2. Memverifikasi bagian ledger setelah transaksi terakhir dipulihkan oleh cadangan dan hingga akhir ledger. Untuk ini, Anda harus menggunakan hash database dari bagian bercakar rantai. Meskipun hash database tidak cocok dengan bagian asli ledger, database masih dapat memverifikasi bagian fork ledger belum dirusak. Jika ini juga menunjukkan perubahan, ini berarti bahwa telah ada lebih dari satu peristiwa perubahan dan prosesnya perlu diterapkan secara rekursif untuk memulihkan berbagai bagian ledger dari cadangan.
  3. Perbaiki ledger tabel secara manual dengan memasukkan kembali informasi untuk transaksi terverifikasi dan komputasi ulang hash untuk transaksi baru ini yang terjadi setelah peristiwa perusakan pertama di ledger database.

Lihat juga