Databasanvändarhantering är en särskilt viktig del av datasäkerheten, eftersom vi måste förstå vem som har åtkomst till databasen och ställa in åtkomsträttigheterna för varje användare. Om en databas inte har en korrekt användarhantering kommer användaråtkomsten att bli väldigt rörig och svår att underhålla allt eftersom.
MongoDB är en NoSQL-databas och dokumentarkiv. Att tillämpa RBAC-konceptet (Role Based-Access Control) är nyckeln till att implementera korrekt användarhantering för att hantera användaruppgifter.
Vad är rollbaserad åtkomstkontroll (RBAC)?
RBAC är ett tillvägagångssätt som begränsar systemet endast till behöriga användare. I en organisation skapas roller för olika jobbfunktioner, i databasen skapar vi sedan åtkomsträttigheter för att utföra vissa operationer tilldelade en viss roll.
Anställda (eller andra systemanvändare) tilldelas vissa roller och genom dem tilldelas behörigheter att utföra datorsystemfunktioner. Användare ges inte behörigheter direkt, utan får dem bara genom sin roll (eller roller). Att hantera individuella användarrättigheter blir en fråga om att helt enkelt placera den lämpliga rollen på användarens konto; detta förenklar allmänna operationer (som att lägga till användare eller byta användaravdelning).
Tre huvudregler är satta för RBAC är:
- Rolltilldelning :Ett ämne kan endast utföra behörigheter om ämnet har valts eller har tilldelats en roll.
- Auktoriseringens roll :ett ämnes aktiva roll måste vara auktoriserat för ämnet. Med regel 1 ovan säkerställer denna regel att användare endast kan ta roller för de som är auktoriserade.
- Tillståndsbehörighet :En subjekt kan endast utföra tillstånd om tillstånd är auktoriserat för subjektets aktiva roll. Med regler 1 och 2 säkerställer denna regel att användare endast kan utöva behörighet för dem som är auktoriserade.
Den här bloggen kommer kortfattat att granska rollbaserad åtkomstkontroll i MongoDB-databasen.
MongoDB-användarroller
MongoDB har flera typer av roller i databasen, de är...
Inbyggda roller
Ger åtkomst till data och åtgärder till MongoDB genom rollbaserad auktorisering och har inbyggda roller som ger flera åtkomstnivåer i databasen.
Roll ger flera privilegier att göra något på den resurs som har skapats. MongoDB inbyggda roller har flera kategorier:
- Användardatabas :Roller Databasanvändare har en roll att manipulera data i icke-systeminsamling. Exempel på roller i User Database är:read, readWrite.
- Databasadministration :Roller Databasadministration behandlar administrativ hantering av databaser som användaradministration, schema och objekt i den.
- Exempel på roller för databasadministration är:dbAdmin, userAdmin, dbOwner.
- Klusteradministration :Klusteradministrationens roll är att administrera hela MongoDB-systemet, inklusive dess replikuppsättningar och skärvor. Exempel på klusteradministrationsroller är:clusterAdmin, clusterManager.
- Säkerhetskopiering och återställning :Denna roll är specifik för funktioner relaterade till säkerhetskopiering av databas i MongoDB. Exempel på roller är:säkerhetskopiering, återställning.
- Alla databasroller :Roller finns i databasadministratören och har tillgång till alla databaser utom lokal och config. Exempel är:readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase.
- Superanvändare :Roller har förmågan att ge åtkomst till varje användare, till varje privilegium, i alla databaser. Exempel på denna roll:root
Användardefinierade roller
Förutom inbyggda roller kan vi skapa våra egna roller efter våra behov, vilka privilegier vi kommer att ge dessa roller. För att skapa roller kan du använda funktionskommandot db.createRole (). Förutom att kunna skapa roller finns det flera andra funktioner för att hantera befintliga roller såsom:db.dropRole () vilket är användbart för att ta bort befintliga roller i databasen, db.getRole () funktioner för att få all information från specifika roller.
Privilegeåtgärder i MongoDB
Behörighetsåtgärder i MongoDB är åtgärder som kan utföras av en användare på en resurs. MongoDB har flera åtgärdskategorier, nämligen:
- Databashanteringsåtgärder, åtgärder relaterade till kommandon relaterade till databasadministration som changePassword, createCollection, createIndex-åtgärder.
- Fråge- och skrivåtgärder, åtgärder relaterade till att utföra datamanipulation i en samling. Till exempel i insert-åtgärden är kommandot som kan köras i den åtgärden insert-kommandot som kan infogas i dokument.
- Deployment Management Actions, åtgärder relaterade till ändringar i databaskonfiguration. Några åtgärder som faller inom kategorin Deployment Management är cpuProfiler, storageDetails, killOp.
- replikeringsåtgärder, åtgärder relaterade till exekvering av databasreplikeringsresurser som replSetConfigure, replSetHeartbeat.
- Serveradministrationsåtgärder, åtgärder relaterade till kommandon från serveradministrationsresurser på mongoDB såsom logrotera-åtgärder som används för att rotera loggdatabaser på operativsystemnivå.
- Sharding-åtgärder, åtgärder relaterade till kommandon från databas-sharding-databaser som addShard för att lägga till nya shardnoder.
- Sessionsåtgärder, åtgärder relaterade till resurssessioner i en databas som listSessions, killAnySession.
- Diagnostiska åtgärder, åtgärder relaterade till diagnostik av resurser som dbStats för att ta reda på de senaste tillstånden i databasen.
- Gratis övervakningsåtgärder, åtgärder relaterade till övervakning i databasen.
Hantera MongoDB-användare och roller
Du kan skapa en användare och sedan tilldela användaren inbyggda roller, till exempel enligt följande:
db.createUser( {
user: "admin",
pwd: "thisIspasswordforAdmin",
roles: [ { role: "root", db: "admin" } ]
} );
I skriptet ovan, vilket betyder att adminanvändaren kommer att få ett lösenord som har definierats med inbyggda rotroller, där rollen ingår i kategorin Superanvändare.
Förutom det kan du tilldela mer än en roll till en användare, här är ett exempel:
db.createUser(
{user:'businessintelligence',
pwd:'BIpassw0rd',
roles:[{'role':'read', 'db':'oltp'}, { 'role':'readWrite', 'db':'olapdb'}]
});
Business intelligence-användare har två roller, först läsrollerna i oltp-databasen och readWrite-rollerna i olapdb-databasen.
Om du skapar användardefinierade roller kan du använda kommandot db.createRole (). Du måste bestämma syftet med att skapa rollen så att du kan bestämma vilka åtgärder som kommer att vara i den rollen. Följande är ett exempel på hur man skapar en roll för att övervaka Mongodb-databasen :
use admin
db.createRole(
{
role: "RoleMonitoring",
privileges: [
{ resource: { cluster: true }, actions: [ "serverStatus" ] }
],
roles: []
}
)
Då kan vi tilldela den användardefinierade rollen till användaren som vi ska skapa, kan använda följande kommando:
db.createUser( {
user: "monuser",
pwd: "thisIspasswordforMonitoring",
roles: [ { role: "RoleMonitoring", db: "admin" } ]
} );
Under tiden, för att tilldela rollen till en befintlig användare, kan du använda följande kommando:
db.grantRolesToUser(
"existingmonuser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
För att återkalla en befintlig användare av en roll kan du använda följande kommando:
db.revokeRolesFromUser(
"oldmonguser",
[
{ role: "RoleMonitoring", db: "admin" }
]
)
Genom att använda användardefinierade roller kan vi skapa roller som vi vill i enlighet med de åtgärder vi kommer att vidta på dessa roller, såsom roller för att begränsa användare kan bara ta bort rader i vissa databaser.
Slutsats
Användning av åtkomsträttigheter kan förbättra säkerheten. Att kartlägga roller och användare i databasen gör det enkelt för dig att hantera användaråtkomst.
Se till att all denna information om roller och rättigheter dokumenteras korrekt med begränsad åtkomst till dokumentet. Detta hjälper dig att dela informationen till andra DBA eller supportpersonal och är praktiskt för revisioner och felsökning.