Video: Attribute-based Encryption and Signatures - Prof. Jovan Golic 2024
Pola yang berguna untuk keamanan adalah menerapkan perizinan berdasarkan data dalam catatan daripada memberikan izin secara terpisah ke catatan. Ini bisa didasarkan pada nilai metadata, kolom individu (Bigtable clones), atau elemen (basis data Agregat NoSQL).
Contoh yang bagus adalah nama pelanggan yang disebutkan dalam dokumen. Anda mungkin ingin membatasi akses ke semua dokumen yang menyebutkan bahwa -pelanggan hanya orang-orang yang memiliki akses ke informasi pelanggan ini. Anda dapat membatasi akses ke dokumen ini dengan memproses data di dalam dokumen, dan menerapkan izin keamanan yang relevan berdasarkan nilai data tersebut.
Tidak ada database NoSQL yang memberikan kemampuan ini tepat di luar kotak. Itu karena izin harus diberikan ke catatan setelah data disimpan oleh aplikasi namun sebelum tersedia untuk pengambilan oleh aplikasi atau pengguna lain. Jadi, izin ini harus dilakukan dalam batas transaksi.
Juga, sangat sedikit database NoSQL yang mendukung transaksi yang memenuhi syarat ACID (MarkLogic, FoundationDB, dan Neo4j, misalnya). Jika sebuah database tidak mendukung pengaturan hak akses yang tidak sesuai berdasarkan data dalam dokumen namun mendukung transaksi ACID dan pemicu pra-komit, maka solusi mudah dimungkinkan.
Biasanya mudah untuk menulis pemicu yang memeriksa adanya nilai dalam catatan dan untuk memodifikasi perizinan berdasarkan nilainya. Selama database mendukung melakukannya selama proses komit, dan bukan setelah komit, maka Anda tahu data Anda dibuat aman dengan menggunakan pemicu pra-komit sederhana.
Sebagai contoh, MarkLogic Server mendukung transaksi ACID serializable dan pemicu pre-commit. Berikut adalah dokumen XML sederhana yang ingin saya dukung untuk kontrol akses berbasis atribut:
jbloggs ACME Lorem Ipsum Dolar Duduk Amet …
Pemicu MarkLogic Server menggunakan bahasa XQuery W3C. Contoh XQuery berikut adalah pemicu sederhana, ketika dipasang di MarkLogic, memberikan izin baca dan tulis:
xquery version "1. 0-ml"; import module namespace trgr = ' // marklogic com / xdmp / trigger 'at' / MarkLogic / trigger. xqy '; mendeklarasikan variabel $ trgr: uri sebagai xs: string external; mendeklarasikan variabel $ trgr: trigger as node () external; jika ("ACME" = fn: doc ($ trgr: uri) / MeetingReport / Customer) maka xdmp: document-set-permissions ($ trgr-uri, (xdmp: permission ("senior", "update"), xdmp: izin ("penjualan", "baca"))) else ()
Setelah pemicu dipasang di setperms file.xqy di Database Modul Server MarkLogic, jalankan kode berikut di aplikasi pengkodean web untuk Konsol MarkLogic - Query untuk mengaktifkan pemicu. Pada instalasi MarkLogic Server default, Anda dapat menemukan Query Console di URL: // localhost: 8000 / qconsole.
Berikut adalah kode yang menunjukkan cara memasang pemicu menggunakan Query Console:
xquery version "1. 0-ml"; import module namespace trgr = " // marklogic com / xdmp / trigger" pada '/ MarkLogic / trigger. xqy '; trgr: create-trigger ("setperms", "Set Sales Doc Permissions", trgr: trigger-data-event (trgr: collection-scope ("meetingreports"), trgr: document-content ("modify"), trgr: pre -commit ()), trgr: trigger-module (xdmp: database ("Modul"), "/ trigger /", "setperms. xqy"), fn: true (), xdmp: default-permissions (), fn: false ())