Tabel ledger yang dapat diperbarui
Berlaku untuk: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance
Tabel ledger yang dapat diperbarui adalah tabel versi sistem tempat pengguna dapat melakukan pembaruan dan penghapusan sekaligus menyediakan kemampuan identifikasi perubahan data (temper-evidence). Saat pembaruan atau penghapusan terjadi, semua versi baris sebelumnya disimpan dalam tabel sekunder yang dikenal dengan tabel riwayat. Tabel riwayat mencerminkan skema tabel ledger yang dapat diperbarui. Saat suatu baris diperbarui, versi terbaru baris tersebut tetap berada di tabel ledger, sementara versi sebelumnya dimasukkan ke dalam tabel riwayat oleh sistem secara transparan ke aplikasi tersebut.
Tabel ledger yang dapat diperbarui dan tabel temporal adalah tabel versi sistem, di mana mesin database mengambil versi baris historis dalam tabel riwayat sekunder. Setiap teknologi tersebut memberikan keuntungan yang unik. Tabel ledger yang dapat diperbarui memungkinkan perubahan pada data saat ini dan data historis dapat diidentifikasi. Tabel temporal mendukung permintaan kueri ke data yang disimpan kapan saja, bukan hanya data yang benar pada saat ini saja. Anda dapat menggunakan kedua teknologi tersebut secara bersamaan dengan membuat tabel ledger yang dapat diperbarui sekaligus temporal.
Anda dapat membuat tabel ledger yang dapat diperbarui dengan menentukan LEDGER = ON
argumen dalam pernyataan CREATE DATABASE (Transact-SQL) Anda.
Tip
LEDGER = ON
bersifat opsional saat membuat tabel ledger yang dapat diperbarui dalam database ledger. Secara default, setiap tabel adalah tabel ledger yang dapat diperbarui dalam database ledger.
Untuk informasi mengenai opsi yang tersedia saat menyebutkan argumen LEDGER
pada pernyataan T-SQL Anda, lihat BUAT TABEL (Transact-SQL).
Penting
Setelah tabel ledger dibuat, tabel tidak dapat dikembalikan ke tabel yang bukan merupakan tabel ledger. Oleh karena itu, penyerang tidak dapat menghapus kemampuan ledger secara sementara pada tabel ledger, membuat perubahan, dan kemudian mengaktifkan kembali fungsionalitas ledger.
Skema tabel ledger yang dapat diperbarui
Tabel ledger yang dapat diperbarui perlu memiliki kolom GENERATED ALWAYS berikut yang berisi metadata yang mencatat transaksi mana yang membuat perubahan pada tabel serta urutan operasi pembaruan baris oleh transaksi tersebut. Data ini berguna untuk tujuan forensik dalam memahami cara data dimasukkan seiring waktu.
Jika Anda tidak menyebutkan kolom GENERATED ALWAYS
yang diperlukan untuk tabel ledger dan tabel riwayat ledger pada pernyataan BUAT TABEL (Transact-SQL), sistem akan secara otomatis menambahkan kolom dan menggunakan nama default berikut. Untuk informasi selengkapnya, lihat contoh di Membuat tabel ledger yang dapat diperbarui.
Nama kolom default | Jenis data | Deskripsi |
---|---|---|
ledger_start_transaction_id | bigint | ID transaksi yang membuat versi baris |
ledger_end_transaction_id | bigint | ID transaksi yang menghapus versi baris |
ledger_start_sequence_number | bigint | Nomor urut suatu operasi dalam suatu transaksi yang membuat versi baris |
ledger_end_sequence_number | bigint | Nomor urut suatu operasi dalam suatu transaksi yang menghapus versi baris |
Tabel riwayat
Tabel riwayat dibuat secara otomatis saat tabel ledger yang dapat diperbarui dibuat. Tabel riwayat mencatat nilai historis baris yang diubah karena pembaruan dan menghapusnya di tabel ledger yang dapat diperbarui. Skema tabel riwayat mencerminkan skema tabel ledger yang dapat diperbarui yang berkaitan.
Saat membuat tabel ledger yang dapat diperbarui, Anda dapat menyebutkan nama skema yang akan memuat tabel riwayat dan nama tabel riwayat atau meminta sistem menghasilkan nama tabel riwayat dan menambahkannya ke skema yang sama dengan tabel ledger. Tabel riwayat dengan nama yang dihasilkan sistem disebut tabel riwayat anonim. Konvensi penamaan untuk tabel riwayat anonim adalah <schema>
.<updatableledgertablename>
.MSSQL_LedgerHistoryFor_<GUID>
.
Tampilan ledger
Untuk setiap tabel ledger yang dapat diperbarui, sistem secara otomatis menghasilkan tampilan yang disebut tampilan ledger. Tampilan ledger adalah gabungan dari tabel ledger yang dapat diperbarui dengan tabel riwayat terkait. Tampilan ledger melaporkan semua perubahan baris yang terjadi pada tabel ledger yang dapat diperbarui dengan menggabungkan data historis pada tabel riwayat. Tampilan ini memungkinkan pengguna, mitra mereka, atau auditor untuk menganalisis semua operasi historis dan mendeteksi potensi pengubahan data (tampering). Setiap operasi baris disertai dengan ID dari transaksi tindakan, sekaligus operasi tersebut adalah DELETE
atau INSERT
. Pengguna dapat mengambil lebih banyak informasi mengenai waktu pelaksanaan transaksi dan identitas pengguna yang melakukannya, serta menghubungkannya dengan operasi lain yang dilakukan oleh transaksi ini.
Misalnya, jika Anda ingin melacak riwayat transaksi untuk skenario perbankan, tampilan ledger memberikan kronik transaksi dari waktu ke waktu. Dengan menggunakan tampilan ledger, Anda tidak perlu melihat tabel ledger dan tabel riwayat yang dapat diperbarui secara independen atau membuat tampilan Anda sendiri untuk melakukannya.
Untuk contoh penggunaan tampilan ledger, lihat Membuat dan menggunakan tabel ledger yang dapat diperbarui.
Skema tampilan ledger mencerminkan kolum yang ditentukan dalam ledger yang dapat diperbarui dan tabel riwayat, namun kolom GENERATED ALWAYS berbeda dengan yang ada pada ledger yang dapat diperbarui maupun tabel riwayat.
Skema tampilan ledger
Catatan
Nama kolom tampilan ledger dapat diubah saat Anda membuat tabel menggunakan parameter <ledger_view_option>
dengan pernyataan BUAT TABEL (Transact-SQL). Untuk mengetahui informasi selengkapnya, lihat opsi tampilan ledger dan contoh terkait dalam CREATE TABLE (Transact-SQL).
Nama kolom default | Jenis data | Deskripsi |
---|---|---|
ledger_transaction_id | bigint | ID transaksi yang membuat atau menghapus versi baris. |
ledger_sequence_number | bigint | Jumlah urutan operasi tingkat baris di dalam transaksi pada tabel. |
ledger_operation_type | tinyint | Berisi 1 (INSERT) atau 2 (DELETE). Memasukkan baris ke dalam tabel ledger akan menghasilkan baris baru pada tampilan ledger yang berisi 1 pada kolom ini. Menghapus baris dari tabel ledger akan menghasilkan baris baru pada tampilan ledger yang berisi 2 pada kolom ini. Memperbarui baris pada tabel ledger menghasilkan dua baris baru pada tampilan ledger. Satu baris berisi 2 (DELETE) dan baris lainnya berisi 1 (INSERT) pada kolom ini. |
ledger_operation_type_desc | nvarchar(128) | Berisi INSERT atau DELETE . Untuk informasi selengkapnya, lihat baris sebelumnya. |