Zum Hauptinhalt springen

Security

Grundbegriffe

Authentisierung - Authentication

  • Identitätsprüfung
  • Erbringen eines Nachweises für behauptete Identität

Authentifizierung - Authentication

  • Prüfung der behaupteten Identität

Autorisierung - Authorization

  • Rechtevergabe
  • Einräumen von speziellen Rechten

Zugriffskontrolle aktivieren

  • Zugriffskontrolle ist standardmäßig deaktiviert

1. Adminuser erstellen

use admin
db.createUser(
{
user: "admin",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)
Enter password: ***** // e.g. 12345

2. Server neu starten

  1. Konfigurations-Datei des Servers als Administrator öffnen
    • unter Windows: C:\Program Files\MongoDB\Server\6.0\bin\mongod.cfg
  2. security.authorization zu enabled ändern
    # security
    security:
    authorization: enabled
  3. Server neu starten
    • Windows
      • Variante 1: Dienste / MongoDB Server (MongoDB) neu starten
      • Variante 2:
        net stop "MongoDB Server (MongoDB)"
        net start "MongoDB Server (MongoDB)"
    • noch nicht geprüft: (unter Windows: mongod --config "C:\Program Files\MongoDB\Server\6.0\bin\mongod.cfg")
  4. Als Administrator anmelden
    mongosh --username myUserAdmin --password
    oder über MongoDBCompass

Rollen

  • Role-Based Access Control (RBAC)
  • Benutzer erhalten Rollen auf bestimmte Datenbanken

Vordefinierte Rollen

RolleBerechtigungenReichweite
readLesenauf bestimmten Datenbanken
readWriteLesen und Schreibenauf bestimmten Datenbanken
userAdminErstellung von Benutzernauf bestimmten Datenbanken
dbOwneralle Operationenauf bestimmten Datenbanken
backupnur Erstellung von Backupsauf bestimmten Datenbanken
restoreZurückladen/Restoreeiner bestimmten Datenbank
readAnyDatabaseLesenauf allen Datenbanken
readWriteAnyDatabaseLesen und Schreibenauf allen Datenbanken
userAdminAnyDatabaseErstellung von Benutzernauf allen Datenbanken
rootSuperuser-Rolle
.........

Rollen hinzufügen

use test
db.grantRolesToUser(
"myTester",
[
{ role: "read", db: "accounts" }
]
)

Rollen entfernen

use test
cuse test
db.revokeRolesFromUser(
"myTester",
[
{ role: "read", db: "reporting" }
]
)

Benutzer

Benutzer erstellen

  • Benutzer können mit einer oder mehreren Rollen erstellt werden
  • Benutzer werden auf bestimmten Datenbank erstellt
    • wird für Authentifizierung verwendet
    • muss bei Anmeldung mit angegeben werden
  • passwordPrompt()
    • fragt nach dem Passwort
  • passwordPrompt("Enter a password with another text:")
    • fragt nach dem Passwort mit einem anderen Text
use test
db.createUser(
{
user: "myTester",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "readWrite", db: "test" },
{ role: "read", db: "reporting" }
]
}
)

Benutzer anmelden

MongoDB Compass:

Shell:

mongosh "mongodb://<user>@localhost:27017/?authSource=<database>"

mongosh localhost:27017/admin --username exampleUser

mongosh --username exampleUser

Benutzer anzeigen

Als Administrator können alle Benutzer und deren Rollen angezeigt werden:

use admin
db.system.users.find()
[
{
_id: 'test.myTester',
userId: new UUID("f6d02161-d649-42a6-a4c3-7319268e4340"),
user: 'myTester',
db: 'test',
credentials: {
'SCRAM-SHA-1': {
iterationCount: 10000,
salt: 'uU/JxR9Gg6M/SHdUyyMT9g==',
storedKey: 'XqQ9GNjw4tk+gjwSjHu+cbu++KM=',
serverKey: 'E3GWhFo0Il4dSy/0wJ5YAsdgYUI='
},
'SCRAM-SHA-256': {
iterationCount: 15000,
salt: 'DMSIRSDzBmT2GYcAH1gDFzoQUyau3YqpmR1QZw==',
storedKey: '+92rEZtg8EQpAQwXiCAV23OI2GyXMR+iMfHTMrYlFzc=',
serverKey: '+bxyif89ucFUpiQNOxFyIQKrjq1RiBdCs3PmYjO2i+w='
}
},
roles: [
{role: 'read', db: 'reporting'},
{role: 'read', db: 'pizza'},
{role: 'readWrite', db: 'test'}
]
}
]

Passwort eines Benutzers ändern

use <authentificationDatabase>
db.changeUserPassword("<userName>", "<newPassword>")

Benutzer löschen

use <authentificationDatabase>
db.dropUser("<userName>")