In diesem Tutorial zeigen wir Ihnen, wie Sie SCRAM (Salted Challenge Response Authentication Mechanism) für die Client-Authentifizierung auf einer eigenständigen MongoDB-Instanz einrichten. SCRAM ist ein sicheres Authentifizierungsmechanismus, der die Authentifizierung zwischen Clients und dem MongoDB-Server bereitstellt.
Das Tutorial geht davon aus, dass Sie MongoDB bereits auf Ihrem System installiert haben.
Zunächst müssen Sie die eigenständige mongod-Instanz ohne Zugriffskontrolle ausführen. Sie können dies tun, indem Sie in einem Terminalfenster den folgenden Befehl als Benutzer mongod ausführen:
mongod --port 27017 --dbpath /var/lib/mongodb
In diesem Befehl gibt --port
die Portnummer an und --dbpath
gibt den Pfad zum Datenbankverzeichnis an. Das Tutorial geht davon aus, dass das Verzeichnis /var/lib/mongodb
existiert und der Standard-dbPath
ist. Sie können ein anderes Datenverzeichnis oder einen anderen Port angeben, wie es benötigt wird.
Wenn die mongod-Instanz gestartet wird, werden einige Systemdateien im Verzeichnis /var/lib/mongodb
erstellt. Um sicherzustellen, dass die Systemdateien die richtigen Besitzverhältnisse haben, führen Sie dieses Tutorial als Benutzer mongod aus. Wenn Sie mongod als Root-Benutzer starten, müssen Sie später die Dateiberechtigungen aktualisieren.
Als nächstes müssen Sie sich mit der Datenbankverbindung über mongosh
verbinden. Öffnen Sie ein neues Terminalfenster und geben Sie den folgenden Befehl ein:
mongosh --port 27017
Wenn Sie sich mit einer anderen Datenbankverbindung verbinden, geben Sie zusätzliche Befehlszeilenoptionen wie --host
an, wie es benötigt wird.
Sie können den Benutzeradministrator entweder vor oder nach dem Aktivieren der Zugriffskontrolle erstellen. Wenn Sie die Zugriffskontrolle aktivieren, bevor Sie einen Benutzer erstellen, bietet MongoDB eine Localhost-Ausnahme, mit der Sie einen Benutzeradministrator in der Admin-Datenbank erstellen können. Sobald erstellt, müssen Sie sich als Benutzeradministrator authentifizieren, um weitere Benutzer zu erstellen.
Verwenden Sie in mongosh
die use
-Befehlssequenz, um zur Admin-Datenbank zu wechseln, und fügen Sie den Benutzer myUserAdmin
mit den Rollen userAdminAnyDatabase
und readWriteAnyDatabase
hinzu:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)
Die passwordPrompt()
-Methode fordert Sie auf, das Passwort einzugeben. Sie können Ihr Passwort auch direkt als Zeichenfolge angeben. Wir empfehlen, die passwordPrompt()
-Methode zu verwenden, um zu verhindern, dass das Passwort auf Ihrem Bildschirm sichtbar ist und möglicherweise das Passwort in der Shell-Historie preisgibt.
Die Rolle userAdminAnyDatabase
ermöglicht es diesem Benutzer, folgende Aufgaben auszuführen:
Sie können Ihrem Benutzer zusätzliche integrierte Rollen oder benutzerdefinierte Rollen zuweisen, wie es benötigt wird.
Die Datenbank, in der Sie den Benutzer erstellen, in diesem Beispiel admin
, ist die Authentifizierungsdatenbank des Benutzers. Obwohl sich der Benutzer zur Authentifizierung an diese Datenbank anmelden muss, kann der Benutzer in anderen Datenbanken Rollen haben. Die Authentifizierungsdatenbank des Benutzers beschränkt nicht die Berechtigungen des Benutzers.
Beenden Sie die mongod-Instanz mithilfe von mongosh
und geben Sie den folgenden Befehl ein:
db.adminCommand( { shutdown: 1 } )
Beenden Sie mongosh
.
Starten Sie die mongod-Instanz mit aktivierter Zugriffskontrolle neu. Wenn Sie die mongod-Instanz über die Befehlszeile starten, fügen Sie die Befehlszeilenoption --auth
hinzu:
mongod --auth --port 27017 --dbpath /var/lib/mongodb
Wenn Sie die mongod-Instanz über eine Konfigurationsdatei starten, fügen Sie die security.authorization
-Konfigurationsdateieinstellung hinzu:
security:
authorization: enabled
Clients, die sich mit dieser Instanz verbinden, müssen sich jetzt authentifizieren und können nur die Aktionen ausführen, die durch ihre zugewiesenen Rollen bestimmt werden.
Sie können Benutzer entweder vor oder nach dem Aktivieren der Zugriffskontrolle erstellen. Wenn Sie die Zugriffskontrolle aktivieren, bevor Sie einen Benutzer erstellen, bietet MongoDB eine Localhost-Ausnahme, mit der Sie einen Benutzeradministrator in der Admin-Datenbank erstellen können. Sobald erstellt, müssen Sie sich als Benutzeradministrator authentifizieren, um weitere Benutzer zu erstellen.
Sie können sich über mongosh
während oder nach der Verbindung authentifizieren. Starten Sie mongosh
mit den Befehlszeilenoptionen -u <Benutzername>
, -p
und --authenticationDatabase <Datenbank>
:
mongosh --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p
Geben Sie Ihr Passwort ein, wenn Sie aufgefordert werden.
Sie haben jetzt die SCRAM-Authentifizierung für Ihre MongoDB-Installation eingerichtet. Weitere Informationen zur Verwendung der SCRAM-Authentifizierung für Replikatsätze oder Sharded Clusters finden Sie unter Einrichten eines Replikatsatzes mit Keyfile-Authentifizierung.