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
- Konfigurations-Datei des Servers als Administrator öffnen
- unter Windows:
C:\Program Files\MongoDB\Server\6.0\bin\mongod.cfg
- unter Windows:
security.authorization
zuenabled
ändern# security
security:
authorization: enabled- 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"
)
- Windows
- Als Administrator anmelden
oder über MongoDBCompass
mongosh --username myUserAdmin --password
Rollen
- Role-Based Access Control (RBAC)
- Benutzer erhalten Rollen auf bestimmte Datenbanken
Vordefinierte Rollen
Rolle | Berechtigungen | Reichweite |
---|---|---|
read | Lesen | auf bestimmten Datenbanken |
readWrite | Lesen und Schreiben | auf bestimmten Datenbanken |
userAdmin | Erstellung von Benutzern | auf bestimmten Datenbanken |
dbOwner | alle Operationen | auf bestimmten Datenbanken |
backup | nur Erstellung von Backups | auf bestimmten Datenbanken |
restore | Zurückladen/Restore | einer bestimmten Datenbank |
readAnyDatabase | Lesen | auf allen Datenbanken |
readWriteAnyDatabase | Lesen und Schreiben | auf allen Datenbanken |
userAdminAnyDatabase | Erstellung von Benutzern | auf allen Datenbanken |
root | Superuser-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>")