Access
 sql >> Baza danych >  >> RDS >> Access

Tworzenie kontroli dostępu opartej na rolach w MongoDB

Tworzenie kontroli dostępu opartej na rolach w MongoDB

MongoDB zapewnia użytkownikom dostęp za pomocą kontrolek opartych na rolach, w tym wielu wbudowanych ról, które można przypisać użytkownikom. Dwie najbardziej znane kontrolki to role odczytu i odczytu/zapisu, jednak czasami nie są one tak szczegółowe, jak byśmy chcieli.

Niedawno miałem okazję poznać role zdefiniowane przez użytkownika w wprowadzonej w MongoDB wersji 2.6. W tym artykule omówimy role zdefiniowane przez użytkownika MongoDB i zdefiniujemy niektóre role niestandardowe, które mogą okazać się przydatne.

  1. Utwórz role w MongoDB

    Tworzenie zdefiniowanej przez użytkownika roli w MongoDB jest dość proste. Możesz użyć polecenia createRole, aby utworzyć nową rolę, a ogólna składnia tworzenia ról jest następująca:

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

    Przed uruchomieniem polecenia createRole upewnij się, że przełączasz się na bazę danych, w której chcesz utworzyć rolę, ponieważ zostaną one zdefiniowane tylko w bazie danych w które zostały stworzone. Jeśli chcesz utworzyć rolę, która zapewnia dostęp do więcej niż jednej bazy danych, musisz ją utworzyć w bazie danych administratora.

    Omówmy główne elementy składni tworzenia ról.

  2. Uprawnienia do ról

    Utwórz uprawnienia dla roli zdefiniowanej przez użytkownika, dodając uprawnienia i definiując swoje działania i zasoby:

    Działania związane z uprawnieniami

    Akcje to zestaw operacji, które są zgrupowane razem, takie jak operacja wstawiania, która może wykonywać zarówno wstawianie, jak i tworzenie. Działania są tak szczegółowe, jak kontrola dostępu oparta na rolach MongoDB. Parametru przywileje można użyć do dodawania ról do akcji mongo, a przywilej stanowi akcje wraz z zasobem, którego dotyczy. Użyj poniższego, aby dodać akcje znajdowania, wstawiania i aktualizowania w bazie danych „mydb”.

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

    Zasoby dotyczące uprawnień

    Dokument zasobów określa zakres, w jakim będą stosowane działania związane z uprawnieniami, i można go ustawić na różnych poziomach szczegółowości w następujący sposób:

    a. Kolekcja

    Zasób można ustawić na zasób:{db: "<db-name>", collection: "<collection name>" } aby przyznać określone działania tylko tej konkretnej kolekcji.

    b. Baza danych

    Zasób można ustawić na konkretną bazę danych, pozostawiając pusty parametr kolekcji. Zasób ciągu zasobów:{db: "<db-name>", collection: "<collection name>" } ustawia zakres na całą bazę danych.

    c. Pojedyncza kolekcja w bazach danych

    Zasób można ustawić na konkretną kolekcję przy użyciu zasobu:{db: ", collection: "<collection name>" } nadania uprawnień do kolekcji we wszystkich bazach danych. To uprawnienie można dodać tylko do roli utworzonej w bazie danych administratora.

    d. Wiele kolekcji w bazach danych

    Zasób można ustawić na wszystkie kolekcje (z wyjątkiem kolekcji systemowych) we wszystkich bazach danych, pozostawiając parametry db i kolekcji pusty. zasób:{db: "", collection: "" } . Ten zasób, podobnie jak ten powyżej, może być przyznany tylko dla roli utworzonej w bazie danych administratora.

    np. Zasób obejmujący cały klaster

    Zasób obejmujący cały klaster można określić za pomocą zasobu:{ cluster : true } . Ten zasób obejmujący cały klaster jest używany do określania stanu systemu, takiego jak zamknięcie replSetReconfig, zamiast przyznawania uprawnień do konkretnego dokumentu.

    f. Wszystkie zasoby

    Nie zaleca się używania tego zakresu w innych sytuacjach niż nadzwyczajne. {anyResource: true } może być użyty do ustawienia zakresu ustawionego na wszystkie zasoby.

  3. Role

    Wbudowane role można również dodać do roli niestandardowej. Gdy wbudowana rola jest dodawana za pomocą parametru roles:[], dodaje uprawnienia wbudowanej roli do roli niestandardowej.

    Oto przykład parametru roles:

    
    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;"}]
    
    

    W tym przykładzie rola niestandardowa odziedziczyłaby wszystkie uprawnienia roli „odczyt” w zdefiniowanej bazie danych. Jeśli rola jest dziedziczona w bazie danych db1, rola niestandardowa może zostać utworzona w bazie danych db1 lub w bazie danych administratora.

    Zastrzeżenia dotyczące zapisu

    Zastrzeżenie dotyczące zapisu określa poziom potwierdzenia żądanego od MongoDB i może być używane do kontrolowania potwierdzeń zapisu z bazy danych. Należy zauważyć, że podczas tworzenia roli nie jest wymagana kwestia dotycząca zapisu. Problem dotyczący zapisu może zawierać pola w, j i wtimeout:

    W  -  Problem z zapisem

    Pole W może być użyte do określenia liczby instancji, do których zapis został propagowany.

    J  -  Napisz problem

    Pole J można ustawić, aby określić, czy zapis jest zapisywany w dzienniku.

    Czas oczekiwania  –  Problem dotyczący zapisu

    Służy do ustawienia czasu, w którym zapis musi osiągnąć problem z zapisem. Problem dotyczący zapisu może nadal zostać osiągnięty po zgłoszeniu błędu. Jeśli nie ustawiono limitu czasu Wtimeout i nie można spełnić problemu związanego z zapisem, zapis zostanie zablokowany na czas nieokreślony.

  4. Przypisywanie ról

    Niestandardowe role są specyficzne dla bazy danych i mogą być przypisane tylko do użytkownika w tej samej bazie danych.

    Powiedzmy, że stworzyliśmy rolę „myrole” w bazie danych „db1”. Możemy utworzyć użytkownika w bazie danych za pomocą następujących poleceń:

    
    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"}]})
    
    

    Więcej informacji na temat zarządzania użytkownikami można znaleźć w tym poście autorstwa Dharshana na temat zarządzania użytkownikami w MongoDB.

  5. Niestandardowe role użytkownika

    Omówmy kilka niestandardowych ról, które mogą być przydatne.

    Pojedyncza baza danych — uprawnienia do odczytu, wstawiania i aktualizacji

    Wbudowane role odczytu i odczytu i zapisu mogą czasami wydawać się zbyt wiele uprawnień lub za mało. Zobaczmy, jak możemy stworzyć niestandardową rolę, przyznając tylko uprawnienia do odczytu, wstawiania i zapisu.

    Już wiemy, że potrzebujemy wszystkich uprawnień do odczytu, abyśmy mogli dodać wbudowaną rolę „odczyt” do naszej niestandardowej roli. Potrzebujemy też uprawnień do tworzenia i aktualizowania dokumentów, które można dodać, dodając uprawnienia do czynności wstawiania i aktualizowania. Jeśli chcielibyśmy dać użytkownikowi możliwość tworzenia indeksu i tworzenia kolekcji, możemy dodać uprawnienia akcji createIndex i createCollection.

    Dla zakresu, załóżmy, że mam bazę danych o nazwie „db1”, na której ustawiłem powyższe uprawnienia. Polecenie tworzenia wyglądałoby mniej więcej tak:

    
    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"}]
    
    })
    
    

    Powyższe polecenie utworzy rolę z <role-name> w bazie danych db1. Użytkownik, któremu przyznano uprawnienia przez powyższą rolę, nie będzie miał akcji „usuń” uprawnienia. Pamiętaj też, że metod db.collection.findAndModify(), db.collection.mapReduce() i db.collection.aggregate() nie można uruchomić w pełni, ponieważ wymagają one uprawnienia do usuwania.

    Wszystkie bazy danych — uprawnienia do odczytu, wstawiania i aktualizacji

    Możemy utworzyć rolę w bazie danych administratora podobną do powyższej, aby przyznać uprawnienia do odczytu, tworzenia i aktualizacji we wszystkich bazach danych. Ta rola powinna zostać utworzona w bazie danych administratora, a kolejny użytkownik powinien również zostać utworzony w bazie danych administratora.

    W tej roli, zamiast używać standardowej roli odczytu, możemy dziedziczyć uprawnienia z roli readAnyDatabase. Tworzenie roli wyglądałoby mniej więcej tak:

    
    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"}]
    
    })
    
    

    Role pisarza związane z zapisem

    Jeśli masz scenariusz, w którym należy wymusić obawy związane z zapisem, oto jak można je dodać do roli. Dodanie problemu dotyczącego zapisu do roli wymusiłoby to na wszystkich użytkownikach przyznanych w ramach tej roli w bazie danych. Zdefiniujmy rolę z problemem zapisu, który wymusza większość zapisów:

    
    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. Znaczenie dobrego projektu bazy danych (i 7 kroków do jego osiągnięcia)

  2. Jak profesjonaliści z branży nieruchomości mogą korzystać z Microsoft Access

  3. Jak uzyskać dostęp do wbudowanego szablonu CRM w programie Microsoft Access

  4. Tworzenie kontroli dostępu opartej na rolach w MongoDB

  5. Dlaczego powinieneś ograniczać dostęp użytkowników do swojej bazy danych