Verifikasi database

Berlaku untuk: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Ledger menyediakan bentuk integritas data yang disebut integritas ke depan, yang memberikan bukti perubahan data pada data dalam tabel ledger Anda. Proses verifikasi database dimaknai sebagai input satu atau beberapa hash database yang dihasilkan sebelumnya. Kemudian mengolah ulang hash yang disimpan di ledger database berdasarkan status tabel ledger saat ini. Jika hash yang dikomputasi tidak cocok dengan hash input, verifikasi tersebut gagal. Kegagalan tersebut mengindikasikan bahwa data telah diubah. Proses verifikasi melaporkan semua inkonsistensi yang terdeteksi.

Proses verifikasi database

Proses verifikasi memindai semua tabel ledger dan riwayat. Ini mengolah ulang hash SHA-256 dari barisnya dan membandingkannya dengan file hash database yang diteruskan ke prosedur verifikasi yang tersimpan.

Karena verifikasi ledger mengolah ulang semua hash untuk transaksi dalam database, verifikasi dapat menjadi proses intensif sumber daya untuk database dengan data dalam jumlah besar. Untuk mengurangi biaya verifikasi, fitur tersebut memberikan opsi untuk memverifikasi tabel ledger tersendiri atau hanya subkumpulan tabel ledger.

Anda menyelesaikan verifikasi database melalui dua prosedur tersimpan, tergantung pada apakah Anda menggunakan penyimpanan hash otomatis atau Anda mengelola hash secara manual.

Catatan

Opsi database ALLOW_SNAPSHOT_ISOLATION harus diaktifkan pada database sebelum Anda bisa menjalankan prosedur tersimpan verifikasi.

Verifikasi database yang menggunakan penyimpanan hash otomatis

Saat menggunakan penyimpanan hash otomatis untuk menghasilkan dan menyimpan hash database, lokasi penyimpanan hash berada di tampilan katalog sistem sys.database_ledger_digest_locations sebagai objek JSON. Menjalankan verifikasi database terdiri dari menjalankan prosedur sistem sp_verify_database_ledger_from_digest_storage yang tersimpan. Tentukan objek JSON dari tampilan katalog sistem sys.database_ledger_digest_locations tempat hash database dikonfigurasi untuk disimpan.

Ketika menggunakan penyimpanan hash otomatis, Anda dapat mengubah lokasi penyimpanan sepanjang siklus hidup tabel ledger. Misalnya, jika Anda mulai dengan menggunakan penyimpanan Azure yang tidak dapat diubah untuk menyimpan file hash, tetapi nanti ingin menggunakan Azure Confidential Ledger. Perubahan lokasi ini disimpan di sys.database_ledger_digest_locations.

Saat Anda menjalankan verifikasi ledger, periksa lokasi digest_locations untuk memastikan digest yang digunakan dalam verifikasi diambil dari lokasi yang Anda harapkan. Anda ingin memastikan bahwa pengguna istimewa belum mengubah lokasi penyimpanan hash ke lokasi penyimpanan yang tidak terlindungi, seperti Azure Storage, tanpa kebijakan kekekalan yang dikonfigurasi dan dikunci.

Untuk menyederhanakan verifikasi saat menggunakan beberapa lokasi penyimpanan hash, skrip berikut ini akan mengambil lokasi hash dan menjalankan verifikasi dengan menggunakan lokasi tersebut.

DECLARE @digest_locations NVARCHAR(MAX) = (SELECT * FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES);
SELECT @digest_locations as digest_locations;
BEGIN TRY
    EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations;
    SELECT 'Ledger verification succeeded.' AS Result;
END TRY
BEGIN CATCH
    THROW;
END CATCH

Verifikasi database yang menggunakan penyimpanan hash manual

Saat Anda menggunakan penyimpanan hash manual untuk menghasilkan dan menyimpan hash database, prosedur tersimpan sp_verify_database_ledger digunakan untuk memverifikasi database ledger. Konten JSON dari hash ditambahkan dalam prosedur tersimpan. Saat menjalankan verifikasi database, Anda dapat memilih untuk memverifikasi semua tabel dalam database atau memverifikasi tabel tertentu.

Kode berikut ini adalah contoh menjalankan prosedur tersimpan sp_verify_database_ledger dengan melewati dua hash untuk verifikasi:

EXECUTE sp_verify_database_ledger N'
[
    {
        "database_name":  "ledgerdb",
        "block_id":  0,
        "hash":  "0xDC160697D823C51377F97020796486A59047EBDBF77C3E8F94EEE0FFF7B38A6A",
        "last_transaction_commit_time":  "2020-11-12T18:01:56.6200000",
        "digest_time":  "2020-11-12T18:39:27.7385724"
    },
    {
        "database_name":  "ledgerdb",
        "block_id":  1,
        "hash":  "0xE5BE97FDFFA4A16ADF7301C8B2BEBC4BAE5895CD76785D699B815ED2653D9EF8",
        "last_transaction_commit_time":  "2020-11-12T18:39:35.6633333",
        "digest_time":  "2020-11-12T18:43:30.4701575"
    }
]';

Kode pengembalian untuk sp_verify_database_ledger dan sp_verify_database_ledger_from_digest_storage adalah 0 (berhasil) atau 1 (gagal).

Rekomendasi

Idealnya, Anda ingin meminimalkan atau bahkan menghilangkan kesenjangan antara waktu serangan terjadi dan waktu terdeteksi. Microsoft merekomendasikan penjadwalan verifikasi ledger] secara teratur untuk menghindari pemulihan database dari hari atau bulan yang lalu setelah perubahan terdeteksi. Interval verifikasi harus diputuskan oleh pelanggan, tetapi ketahuilah bahwa verifikasi ledger dapat memakan sumber daya. Sebaiknya jalankan ini selama jendela pemeliharaan atau di luar jam sibuk.

Menjadwalkan verifikasi database di Azure SQL Database dapat dilakukan dengan Elastic Jobs atau Azure Automation. Untuk menjadwalkan verifikasi database di Azure SQL Managed Instance dan SQL Server, Anda dapat menggunakan SQL Server Agent.

Izin

Verifikasi database memerlukan VIEW LEDGER CONTENT izin. Untuk detail tentang izin yang terkait dengan tabel ledger, lihat Izin.