Access
 sql >> Teknologi Basis Data >  >> RDS >> Access

Membuat Kontrol Akses Berbasis Peran di MongoDB

Membuat Kontrol Akses Berbasis Peran di MongoDB

MongoDB menyediakan akses pengguna melalui kontrol berbasis peran, termasuk banyak peran bawaan yang dapat ditetapkan ke pengguna. Dua kontrol yang paling terkenal adalah peran membaca dan membaca/menulis, namun terkadang peran tersebut tidak terperinci seperti yang kita inginkan.

Baru-baru ini saya berkesempatan menjelajahi peran yang ditentukan pengguna dalam diperkenalkan di MongoDB versi 2.6. Dalam artikel ini, kita akan membahas peran yang ditentukan pengguna MongoDB dan menentukan beberapa peran khusus yang mungkin berguna bagi Anda.

  1. Membuat Peran di MongoDB

    Membuat peran yang ditentukan pengguna di MongoDB cukup sederhana. Anda dapat menggunakan perintah createRole untuk membuat peran baru, dan sintaks umum buat peran adalah sebagai berikut:

    
    {
       createRole: "<role name>",
       privileges: [{
          resource: { <resource> },
          actions: [ "<action>",] },
       ],
       roles: [
          { role: "<role>", db: "<database>" } | "<role>",],
       writeConcern: <write concern document>
    }
    
    

    Sebelum menjalankan perintah createRole, pastikan Anda beralih ke database tempat Anda ingin membuat peran karena mereka hanya akan didefinisikan dalam database di yang mereka ciptakan. Jika Anda ingin membuat peran yang memberikan akses ke lebih dari satu database, peran tersebut harus dibuat di database admin.

    Mari kita bahas komponen utama sintaks peran create.

  2. Hak Istimewa Peran

    Buat izin untuk peran yang ditentukan pengguna dengan menambahkan hak istimewa dan menentukan tindakan serta sumber daya Anda:

    Tindakan Hak Istimewa

    Tindakan adalah sekumpulan operasi yang dikelompokkan bersama, seperti tindakan penyisipan yang dapat melakukan penyisipan dan pembuatan. Tindakan sama granularnya dengan kontrol akses berbasis peran MongoDB. Parameter hak istimewa dapat digunakan untuk menambahkan peran ke tindakan mongo, dan hak istimewa merupakan tindakan bersama dengan sumber daya yang diterapkannya. Gunakan yang berikut ini untuk menambahkan tindakan temukan, sisipkan, dan perbarui pada basis data “mydb”.

    
    privileges:
    [
       {resource: {db: "mydb", collection: "" },
       actions: [ “find”,”insert”,”update” ] }
    ]
    
    

    Sumber Daya Privilege

    Dokumen sumber daya menentukan cakupan tindakan hak istimewa Anda yang akan diterapkan, dan dapat disetel pada berbagai perincian sebagai berikut:

    a. Koleksi

    Sumber daya dapat disetel ke sumber daya:{db: "<db-name>", collection: "<collection name>" } untuk memberikan tindakan yang ditentukan ke koleksi tertentu saja.

    b. Basis data

    Sumber daya dapat disetel ke database tertentu dengan membiarkan parameter koleksi kosong. Sumber daya string sumber daya:{db: "<db-name>", collection: "<collection name>" } menetapkan cakupan ke seluruh database.

    c. Koleksi Tunggal di Seluruh Basis Data

    Sumber daya dapat disetel ke koleksi tertentu menggunakan sumber daya:{db: ", collection: "<collection name>" } untuk memberikan izin ke koleksi di semua database. Izin ini hanya dapat ditambahkan ke peran yang dibuat di database admin.

    d. Beberapa Koleksi di Seluruh Basis Data

    Sumber daya dapat diatur ke semua koleksi (kecuali koleksi sistem) di semua database dengan membiarkan parameter db dan koleksi kosong. sumber daya:{db: "", collection: "" } . Sumber daya ini, seperti yang di atas, hanya dapat diberikan pada peran yang dibuat di database admin.

    e. Sumber Daya Seluruh Cluster

    Sumber daya seluruh cluster dapat ditentukan dengan menggunakan sumber daya:{ cluster : true } . Sumber daya seluruh cluster ini digunakan untuk menentukan status sistem, seperti mematikan replSetReconfig daripada memberikan izin pada dokumen tertentu.

    f. Semua Sumber Daya

    Tidak disarankan untuk menggunakan cakupan ini selain untuk keadaan luar biasa. {anyResource: true } dapat digunakan untuk mengatur cakupan yang disetel ke semua sumber daya.

  3. Peran

    Peran bawaan dapat ditambahkan ke peran khusus juga. Saat peran bawaan ditambahkan dengan menggunakan parameter role:[], itu menambahkan izin peran bawaan ke peran khusus.

    Berikut contoh parameter role:

    
    roles: [{ role: "read", db: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;db name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;"}]
    
    

    Dalam contoh ini, peran khusus akan mewarisi semua izin peran "baca" di atas database yang ditentukan. Jika peran diwarisi ke database db1, peran kustom dapat dibuat di database db1 atau di database admin.

    Tulis Kekhawatiran

    Kekhawatiran penulisan menentukan tingkat pengakuan yang diminta dari MongoDB, dan dapat digunakan untuk mengontrol pengakuan penulisan dari database. Perhatikan bahwa masalah penulisan tidak diperlukan saat membuat peran. Kekhawatiran tulis dapat mencakup bidang w, j, dan wtimeout:

    W  -  Tulis Kekhawatiran

    Field W dapat digunakan untuk menyatakan jumlah instance penulisan yang telah disebarkan.

    J  -  Tulis Kekhawatiran

    Field J dapat diatur untuk menentukan apakah penulisan ditulis ke jurnal.

    Waktu habis  -  Tulis Kekhawatiran

    Ini digunakan untuk mengatur waktu penulisan untuk mencapai perhatian penulisan. Kekhawatiran penulisan mungkin masih tercapai setelah kesalahan dilemparkan. Jika Wtimeout belum disetel dan masalah penulisan tidak dapat dicapai, penulisan akan diblokir tanpa batas waktu.

  4. Menetapkan Peran

    Peran khusus bersifat spesifik db, dan hanya dapat ditetapkan ke pengguna di database yang sama.

    Misalnya kita membuat peran "myrole" pada database "db1". Kita dapat membuat pengguna di database menggunakan perintah berikut:

    
    Use db1
    
    db.createUser({"user" : "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;user&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",pwd: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;password&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;","roles" : [{"role" : "myrole", "db" : "db1"}]})
    
    

    Untuk informasi lebih lanjut tentang pengelolaan pengguna, lihat pos ini oleh Dharshan tentang pengelolaan pengguna di MongoDB.

  5. Peran Pengguna Khusus

    Mari kita bahas beberapa peran khusus yang mungkin berguna.

    Single DB – Baca, Sisipkan &Perbarui Izin

    Peran bawaan read dan readWrite terkadang terasa seperti terlalu banyak izin atau terlalu sedikit. Mari kita lihat bagaimana kita dapat membuat peran khusus yang memberikan izin baca, masukkan, dan tulis saja.

    Kami sudah tahu bahwa kami memerlukan semua izin baca sehingga kami dapat menambahkan peran bawaan "baca" ke peran khusus kami. Kami juga memerlukan izin untuk membuat dan memperbarui dokumen, dan ini dapat disertakan dengan menambahkan penyisipan dan pembaruan tindakan hak istimewa. Jika kita ingin memberi pengguna kemampuan untuk membuat indeks dan membuat koleksi, kita dapat menambahkan tindakan hak istimewa createIndex dan createCollection.

    Untuk cakupannya, mari kita asumsikan saya memiliki db bernama “db1” tempat saya mengatur izin di atas. Perintah create akan terlihat seperti ini:

    
    Use db1.
    
    db.createRole(
    
    {
    
    createRole: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;role-name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",
    
    privileges: [
    
    { resource: { db: "db1", collection: "" },
    
    actions: [ "insert","update","createIndex", "createCollection" ] }
    
    ],
    
    roles: [{ role: "read", db: "db1"}]
    
    })
    
    

    Perintah di atas akan membuat peran dengan <role-name> dalam basis data db1. Pengguna yang telah diberikan izin oleh peran di atas tidak akan memiliki tindakan hak istimewa "hapus". Perhatikan juga bahwa metode db.collection.findAndModify(),  db.collection.mapReduce(), dan  db.collection.aggregate() tidak dapat dijalankan secara penuh karena memerlukan hak penghapusan.

    Semua DB – Baca, Sisipkan &Perbarui Izin

    Kita dapat membuat peran di database admin yang mirip dengan yang di atas, untuk memberikan hak Baca, Buat, dan Perbarui di semua DB. Peran ini harus dibuat di DB admin dan pengguna berikutnya juga harus dibuat di DB admin.

    Untuk peran ini, alih-alih menggunakan peran baca standar, kita dapat mewarisi izin dari peran readAnyDatabase. Pembuatan peran akan terlihat seperti ini:

    
    Use admin.
    
    db.createRole(
    
    {
    
    createRole: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;role-name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",
    
    privileges: [
    
    { resource: { db: "", collection: "" },
    
    actions: [ "insert","update","createIndex", "createCollection" ] }
    
    ],
    
    roles: [{ role: "readAnyDatabase", db: "admin"}]
    
    })
    
    

    Peran Penulis dengan Masalah Penulisan

    Jika Anda memiliki skenario di mana masalah penulisan perlu diterapkan, berikut cara menambahkannya ke peran. Menambahkan masalah tulis ke peran akan memberlakukannya pada semua pengguna yang diberikan berdasarkan peran ini di DB. Mari kita definisikan peran dengan masalah penulisan yang memaksa penulisan mayoritas:

    
    Use admin.
    
    db.createRole(
    
    {
    
    createRole: "&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;role-name&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;",
    
    privileges: [ ],
    
    roles: [{ role: "readWriteAnyDatabase", db: "admin"}],
    
    writeConcern: { w: “majority”, j: false, wtimeout: 300 }
    
    })
    
    

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 10 Cara Efektif untuk Lebih Produktif di Tempat Kerja

  2. Menggunakan Navigasi Hanya Keyboard di Word, Excel, dan PowerPoint (Bagian 3:Panel Tugas)

  3. Cara Mengonversi Kueri Normal ke Kueri Tab Silang di Access

  4. Cara Menampilkan Ketergantungan Objek di Access 2016

  5. Partisi Data untuk Aplikasi Skala Besar