sql >> Database >  >> RDS >> Access

Op rollen gebaseerd toegangscontrole maken in MongoDB

Rolgebaseerde toegangscontrole creëren in MongoDB

MongoDB biedt gebruikerstoegang via op rollen gebaseerde besturingselementen, waaronder veel ingebouwde rollen die aan gebruikers kunnen worden toegewezen. De twee meest bekende besturingselementen zijn de lees- en lees-/schrijfrollen, maar soms zijn ze niet zo gedetailleerd als we zouden willen.

Ik heb onlangs de kans gehad om de door de gebruiker gedefinieerde rollen te verkennen die zijn geïntroduceerd in MongoDB versie 2.6. In dit artikel bespreken we de door MongoDB door de gebruiker gedefinieerde rollen en definiëren we enkele aangepaste rollen die u mogelijk nuttig vindt.

  1. Rollen maken in MongoDB

    Het creëren van een door de gebruiker gedefinieerde rol in MongoDB is vrij eenvoudig. U kunt de opdracht createRole gebruiken om een ​​nieuwe rol te maken, en de algemene syntaxis voor het maken van rollen is als volgt:

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

    Voordat u de opdracht createRole uitvoert, moet u ervoor zorgen dat u overschakelt naar de database waarin u de rol wilt maken, aangezien deze alleen worden gedefinieerd in de database in waarmee ze zijn gemaakt. Als u een rol wilt maken die toegang geeft tot meer dan één database, moet deze worden gemaakt in de beheerdersdatabase.

    Laten we de belangrijkste componenten van de syntaxis voor het maken van rollen doornemen.

  2. Rolrechten

    Maak rechten voor een door de gebruiker gedefinieerde rol door een privilege toe te voegen en je acties en bronnen te definiëren:

    Privilege-acties

    Acties zijn een reeks bewerkingen die zijn gegroepeerd, zoals de invoegactie die zowel invoegen als maken kan uitvoeren. Acties zijn net zo gedetailleerd als de op rollen gebaseerde toegangscontrole van MongoDB. De parameter privileges kan worden gebruikt om rollen toe te voegen aan mongo-acties, en een privilege vormt de acties samen met de bron waarop het van toepassing is. Gebruik het volgende om de acties zoeken, invoegen en bijwerken toe te voegen aan de database "mydb".

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

    Privilege bronnen

    Het brondocument geeft het bereik aan waarop uw privilege-acties van toepassing zijn en kan als volgt op verschillende granulariteiten worden ingesteld:

    a. Collectie

    De resource kan worden ingesteld op resource:{db: "<db-name>", collection: "<collection name>" } om de opgegeven acties alleen aan die specifieke verzameling toe te kennen.

    b. Database

    De bron kan worden ingesteld op een bepaalde database door de verzamelingsparameter leeg te laten. Brontekenreeks bron:{db: "<db-name>", collection: "<collection name>" } stelt het bereik in op de hele database.

    c. Enkele verzameling over databases

    De bron kan worden ingesteld op een bepaalde verzameling met behulp van resource:{db: ", collection: "<collection name>" } om machtigingen voor de verzameling op alle databases te verlenen. Deze machtiging kan alleen worden toegevoegd aan een rol die is aangemaakt in de beheerdersdatabase.

    d. Meerdere verzamelingen in databases

    De bron kan worden ingesteld op alle verzamelingen (behalve de systeemverzamelingen) in alle databases door zowel de db- als de verzamelingsparameters te laten leeg. bron:{db: "", collection: "" } . Deze bron, zoals die hierboven, kan alleen worden toegekend op een rol die is aangemaakt in de beheerdersdatabase.

    e. Clusterbrede bron

    Een clusterbrede resource kan worden gespecificeerd met resource:{ cluster : true } . Deze clusterbrede bron wordt gebruikt om de status van het systeem te specificeren, zoals shutdown replSetReconfig in plaats van het verlenen van machtigingen voor een bepaald document.

    f. Alle bronnen

    Het wordt niet aanbevolen om dit bereik te gebruiken voor iets anders dan buitengewone omstandigheden. {anyResource: true } kan worden gebruikt om het bereik in te stellen voor alle bronnen.

  3. Rollen

    Ingebouwde rollen kunnen ook aan een aangepaste rol worden toegevoegd. Wanneer een ingebouwde rol wordt toegevoegd met behulp van de parameter rollen:[], worden de machtigingen van de ingebouwde rol aan de aangepaste rol toegevoegd.

    Hier is een voorbeeld van de rolparameter:

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

    In dit voorbeeld zou de aangepaste rol alle rechten van de rol "lezen" overnemen voor de gedefinieerde database. Als een rol wordt overgenomen op een database db1, kan de aangepaste rol worden gemaakt in de database db1 of in de beheerdersdatabase.

    Bezorgdheid schrijven

    Schrijfprobleem definieert het niveau van bevestiging dat door MongoDB wordt gevraagd en kan worden gebruikt om schrijfbevestigingen uit de database te beheren. Houd er rekening mee dat een schrijfprobleem niet vereist is bij het maken van een rol. Schrijfzorg kan velden w, j en wtimeout bevatten:

    W  -  Schrijfprobleem

    Veld W kan worden gebruikt om het aantal instanties aan te geven waarnaar het schrijven is gepropageerd.

    J  -  Schrijfprobleem

    Veld J kan worden ingesteld om te bepalen of het schrijven naar het journaal wordt geschreven.

    Wtimeout  -  Schrijfprobleem

    Dit wordt gebruikt om de tijd in te stellen waarbinnen het schrijven moet zorgen voor schrijfproblemen. Het schrijfprobleem kan nog steeds worden bereikt nadat de fout is opgetreden. Als er geen Wtimeout is ingesteld en het schrijfprobleem niet kan worden bereikt, wordt het schrijven voor onbepaalde tijd geblokkeerd.

  4. Rollen toewijzen

    Aangepaste rollen zijn DB-specifiek en kunnen alleen worden toegewezen aan een gebruiker in dezelfde database.

    Laten we zeggen dat we een rol "myrole" hebben gemaakt in database "db1". We kunnen een gebruiker in de database aanmaken met de volgende commando's:

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

    Raadpleeg dit bericht van Dharshan over gebruikersbeheer in MongoDB voor meer informatie over gebruikersbeheer.

  5. Aangepaste gebruikersrollen

    Laten we enkele aangepaste rollen bespreken die nuttig kunnen zijn.

    Enkele DB – machtigingen voor lezen, invoegen en bijwerken

    De ingebouwde rollen read en readWrite kunnen soms aanvoelen als te veel of te weinig rechten. Laten we eens kijken hoe we een aangepaste rol kunnen maken die alleen lees-, invoeg- en schrijfrechten toekent.

    We weten al dat we alle leesrechten nodig hebben, zodat we de ingebouwde rol 'lezen' aan onze aangepaste rol kunnen toevoegen. We hebben ook rechten nodig om documenten te maken en bij te werken, en deze kunnen worden toegevoegd door bevoegdhedenacties invoegen en bijwerken toe te voegen. Als we de gebruiker de mogelijkheid willen geven om een ​​index te maken en een verzameling te maken, kunnen we de privilege-actie createIndex en createCollection toevoegen.

    Laten we voor het bereik aannemen dat ik een db heb met de naam "db1" waarop ik de bovenstaande machtigingen instel. Het create-commando ziet er ongeveer zo uit:

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

    De bovenstaande opdracht zou een rol maken met <role-name> in databank db1. Een gebruiker die door de bovenstaande rol toestemming heeft gekregen, heeft niet de actie "verwijderen". Houd er ook rekening mee dat de methoden db.collection.findAndModify(), db.collection.mapReduce() en db.collection.aggregate() niet volledig kunnen worden uitgevoerd omdat ze het verwijderrecht vereisen.

    Alle DB's - machtigingen voor lezen, invoegen en bijwerken

    We kunnen een rol maken in de beheerdersdatabase die vergelijkbaar is met die hierboven, om lees-, aanmaak- en update-privileges toe te kennen aan alle DB's. Deze rol moet worden aangemaakt in de admin DB en de volgende gebruiker moet ook worden aangemaakt in de admin DB.

    Voor deze rol kunnen we, in plaats van de standaard leesrol te gebruiken, rechten overnemen van de readAnyDatabase-rol. Het aanmaken van een rol ziet er ongeveer zo uit:

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

    Schrijverrollen met schrijfproblemen

    Als je een scenario hebt waarin je je zorgen moet maken over schrijven, kun je dit als volgt aan een rol toevoegen. Als u schrijfzorg aan een rol toevoegt, wordt deze afgedwongen voor alle gebruikers die onder deze rol in de database zijn toegekend. Laten we een rol definiëren met een schrijfprobleem dat meerderheidsschrijven afdwingt:

    
    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. Hoe werk ik met zeer nauwkeurige decimalen in PHP

  2. FILEPROPERTY() gebruiken in SQL Server

  3. Gedachten over SQL Server 2019-edities

  4. Oracle-databaseverbinding in web.config asp.net