Manajemen hash dan verifikasi database

BERLAKU UNTUK: Azure SQL Database

Catatan

Ledger Azure SQL Database saat ini berada dalam pratinjau publik.

Ledger Azure SQL Database ledger menyediakan formulir integritas data yang disebut forward-integrity, yang memberikan bukti perubahan data pada data di tabel ledger Anda. Misalnya, jika transaksi perbankan terjadi pada tabel ledger tempat saldo telah diperbarui ke nilai x, dan penyerang kemudian memodifikasi data dengan mengubah saldo dari x ke y, verifikasi database akan mendeteksi aktivitas perubahan ini.

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.

Hash database

Hash blok terbaru dalam ledger database disebut hash database. Ini merepresentasikan status semua tabel ledger dalam database pada saat blok dihasilkan. Menghasilkan hash database merupakan tindakan yang efisien, karena hanya melibatkan komputasi hash blok yang baru-baru ini ditambahkan.

Hash database dapat dihasilkan secara otomatis oleh sistem atau secara manual oleh pengguna. Anda dapat menggunakannya nanti untuk memverifikasi integritas database.

Hash database dihasilkan dalam format dokumen JSON yang berisi hash blok terbaru, bersama dengan metadata untuk ID blok. Metadata mencakup waktu pembuatan hash dan tanda waktu penerapan transaksi terakhir di blok ini.

Proses verifikasi dan integritas database bergantung pada integritas hash input. Untuk tujuan ini, hash database yang diekstrak dari database harus disimpan dalam penyimpanan tepercaya yang tidak dapat diubah oleh penyerang atau pengguna dengan hak istimewa tingkat tinggi dari server Azure SQL Database.

Pembuatan otomatis dan penyimpanan hash database

Ledger Azure SQL Database terintegrasi dengan fitur penyimpanan yang tidak dapat diubah dari Azure Blob Storage dan Azure Confidential Ledger. Integrasi ini menyediakan layanan penyimpanan yang aman di Azure untuk membantu melindungi hash database dari potensi perubahan. Integrasi ini menyediakan cara yang sederhana dan hemat biaya bagi pengguna untuk mengotomatiskan manajemen hash tanpa harus khawatir tentang ketersediaan dan replikasi geografis mereka.

Anda dapat mengonfigurasi pembuatan otomatis dan penyimpanan has database melalui portal Azure, PowerShell, atau Azure CLI. Ketika Anda mengonfigurasi pembuatan dan penyimpanan otomatis, has database dihasilkan pada interval yang telah ditentukan selama 30 detik dan diunggah ke layanan penyimpanan yang dipilih. Jika tidak ada transaksi yang terjadi di sistem dalam interval 30 detik, hash database tidak akan dihasilkan dan diunggah. Mekanisme ini memastikan bahwa hash database hanya dihasilkan ketika data telah diperbarui dalam database Anda.

Cuplikan layar yang memperlihatkan pilihan untuk mengaktifkan penyimpanan hash.

Penting

Konfigurasikan kebijakan imutabilitas pada kontainer setelah penyediaan untuk memastikan bahwa hash database terlindungi dari perubahan.

Pembuatan otomatis dan penyimpanan hash database

Anda juga dapat menggunakan ledger Azure SQL Database untuk menghasilkan hash database sesuai permintaan sehingga hash dapat disimpan secara manual di layanan atau perangkat apa pun yang dianggap sebagai tujuan penyimpanan tepercaya. Misalnya, Anda dapat memilih perangkat tulis sekali, baca banyak (WORM) lokal sebagai tujuan. Anda dapat membuat hash database secara manual dengan menjalankan prosedur tersimpan sys.sp_generate_database_ledger_digest di SQL Server Management Studio atau Azure Data Studio.

Penting

Menghasilkan hash database memerlukan izin BUAT HASH LEDGER. Untuk detail tentang izin yang terkait dengan tabel ledger, lihat Izin.

EXECUTE sp_generate_database_ledger_digest

Hasil yang dikembalikan adalah satu baris data. Ini harus disimpan ke lokasi penyimpanan tepercaya sebagai dokumen JSON sebagai berikut:

    {
        "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"
    }

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.

Untuk tabel ledger, verifikasi database dapat menjadi proses intensif sumber daya. Anda dapat menggunakannya hanya ketika harus memverifikasi integritas database.

Proses verifikasi dapat dijalankan setiap jam atau harian untuk kasus-kasus ketika integritas database perlu sering dipantau. Atau dapat dijalankan hanya ketika organisasi yang menghosting data melalui audit dan perlu memberikan bukti kriptografi tentang integritas data. Untuk mengurangi biaya verifikasi, ledger 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.

Penting

Verifikasi database memerlukan izin Tampilkan Konten Ledger. Untuk detail tentang izin yang terkait dengan tabel ledger, lihat Izin.

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.

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 menggunakan penyimpanan hash manual untuk menghasilkan dan menyimpan hash database, prosedur tersimpan berikut 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.

Berikut ini adalah sintaks untuk prosedur tersimpan sp_verify_database_ledger:

sp_verify_database_ledger <JSON_document_containing_digests>, <table_name> 

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

Langkah berikutnya