Video: Week 8, continued 2024
Satu corak yang berguna untuk keselamatan adalah untuk menggunakan kebenaran berdasarkan data dalam rekod dan bukan secara berasingan memberikan kebenaran kepada rekod. Ini boleh berdasarkan pada nilai metadata, lajur individu (klon Bigtable), atau elemen (Agregat NoSQL pangkalan data).
Contoh yang baik ialah nama pelanggan yang disebutkan di dalam dokumen. Anda mungkin mahu menyekat akses kepada semua dokumen yang menyebutkan bahawa pelanggan hanya kepada orang-orang yang mempunyai akses kepada maklumat pelanggan ini. Anda boleh menyekat akses kepada dokumen ini dengan memproses data dalam dokumen, dan menggunakan kebenaran keselamatan yang berkaitan berdasarkan nilai data tersebut.
Tiada pangkalan data NoSQL memberikan keupayaan ini keluar dari kotak. Itu kerana keizinan mesti diberikan kepada rekod selepas data disimpan oleh aplikasi tetapi sebelum ia tersedia untuk mendapatkan semula oleh aplikasi atau pengguna lain. Oleh itu, tugasan kebenaran ini mesti berlaku di dalam batas transaksi.
Juga, sangat sedikit pangkalan data NoSQL yang menyokong transaksi yang mematuhi ACID (MarkLogic, FoundationDB, dan Neo4j, lakukan contohnya). Sekiranya pangkalan data tidak menyokong kebenaran tugasan luar kotak berdasarkan data dalam dokumen tetapi menyokong transaksi ACID dan pencetus pra-koma, kemungkinan penyelesaian yang mudah dilakukan.
Ia biasanya mudah untuk menulis pemicu yang memeriksa kehadiran nilai dalam rekod dan mengubah suai kebenaran berdasarkan nilainya. Selagi pangkalan data menyokong melakukannya semasa proses komit, dan bukan selepas komit, maka anda tahu data anda dijadikan selamat dengan menggunakan pemicu pre-commit yang mudah.
Sebagai contoh, MarkLogic Server menyokong transaksi ACID bersiri dan mencetuskan pra-komitmen sepenuhnya. Berikut adalah dokumen XML mudah yang saya mahu menyokong kawalan akses berasaskan atribut:
jbloggs ACME Lorem Ipsum Dolar Sit Amet …
Pencari MarkLogic Server menggunakan bahasa W3C XQuery. Contoh XQuery berikut adalah pencetus mudah yang, apabila dipasang di MarkLogic, memberikan kebenaran membaca dan menulis:
versi xquery "1. 0-ml"; import module namespace trgr = ' // marklogic. com / xdmp / mencetuskan 'di' / MarkLogic / pencetus. xqy '; mengisytiharkan variabel $ trgr: uri sebagai xs: rentetan luaran; mengisytiharkan pemboleh ubah $ trgr: picu sebagai nod () luaran; xdmp: dokument-set-permissions ($ trgr-uri, (xdmp: permission ("seniorsales", "update"), xdmp: kebenaran ("jualan", "baca"))) else ()
Setelah pemicu dipasang dalam setperms file.xqy dalam Pangkalan Data Modul Server MarkLogic, jalankan kod berikut dalam aplikasi pengekodan web untuk MarkLogic - Query Console untuk membolehkan pencetus. Pada pemasangan Pelayan MarkLogic lalai, anda boleh menemui Konsol Pertanyaan di URL: // localhost: 8000 / qconsole.
Berikut adalah kod yang menunjukkan cara memasang pemicu menggunakan Konsol Pertanyaan:
versi xquery "1. 0-ml"; import module namespace trgr = " // marklogic com / xdmp / mencetuskan" di '/ MarkLogic / mencetuskan. xqy '; trgr: create-trigger ("setperms", "Set Permissions Doc Sales", trgr: trigger-data-event (trgr: collection-scope ("meetingreports"), trgr: document-content ("modify" fcom: true (), xdmp: default-permissions (), fn: palsu ())