So sichern Sie MongoDB mit Benutzername und Passwort

376

Ich möchte die Authentifizierung von Benutzername und Kennwort für meine MongoDB-Instanz einrichten, damit bei jedem Remotezugriff nach Benutzername und Kennwort gefragt wird. Ich habe das Tutorial von der MongoDB-Site ausprobiert und Folgendes ausgeführt:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

Danach stieg ich aus und rannte wieder Mongo. Und ich brauche kein Passwort, um darauf zuzugreifen. Selbst wenn ich eine Remoteverbindung zur Datenbank herstelle, werde ich nicht zur Eingabe von Benutzername und Kennwort aufgefordert.


UPDATE Hier ist die Lösung, die ich letztendlich verwendet habe

1) At the mongo command line, set the administrator:

    use admin;
    db.addUser('admin','123456');

2) Shutdown the server and exit

    db.shutdownServer();
    exit

3) Restart mongod with --auth

  $ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/

4) Run mongo again in 2 ways:

   i) run mongo first then login:

        $ ./mongodb/bin/mongo localhost:27017
        use admin
        db.auth('admin','123456');

  ii) run & login to mongo in command line.

        $ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456

Der Benutzername und das Passwort funktionieren für mongodumpund auf die gleiche Weise mongoexport.

Murvinlai
quelle
4
dies für MongDB Version 2.2.x
Tom Imrei
22
In Mongo 3.0.4 lautet der Befehl zum Erstellen eines Benutzers db.createUser () .
Chronologos
4
Bitte folgen Sie diesen Anweisungen, um einen Administrator auf Mongodb 3.0 zu erstellen. Docs.mongodb.org/v3.0/tutorial/add-user-administrator
Sul Aga
3
Ein Update für MongoDB 3.0+: So richten Sie die Authentifizierung in MongoDB 3.0 ein .
Dan Dascalescu
1
Nur um klar zu sein, verschlüsselt dies nicht die Bytes, die über die Leitung gehen. Es ist nur für die Zugangskontrolle.
Daniel F

Antworten:

117

Sie müssen mongodmit der --authOption beginnen, nachdem Sie den Benutzer eingerichtet haben.

Von der MongoDB-Site:

Führen Sie die Datenbank (Mongod-Prozess) mit der --authOption zum Aktivieren der Sicherheit aus. Sie müssen entweder einen Benutzer zur Administrator-Datenbank hinzugefügt haben, bevor Sie den Server mit starten --auth, oder Sie müssen den ersten Benutzer über die localhost-Schnittstelle hinzufügen.

MongoDB-Authentifizierung

Alexandru Petrescu
quelle
1
Ich habe das versucht und bin dem Beispiel gefolgt. Jetzt kann ich es einstellen, nachdem ich den Server mit --auth neu gestartet habe. Wenn ich jedoch versuche, mich anzumelden (./mongo -u theadmin -p 12345), scheitere ich. Ich kann mich nicht anmelden.
Murvinlai
Wenn Sie danach keine Verbindung herstellen können, liegt dies daran, dass Sie versuchen, eine Verbindung auf der adminDatenbank herzustellen, eine andere Datenbank zu verwenden und es erneut zu versuchen. Nur ein userAdmin (AnyDatabase) kann eine Verbindung herstellen admin.
Vadorequest
80

Wow so viele komplizierte / verwirrende Antworten hier.

Dies ist ab Version 3.4 .

Kurze Antwort.

1) Starten Sie MongoDB ohne Zugriffskontrolle.

mongod --dbpath /data/db

2) Stellen Sie eine Verbindung zur Instanz her.

mongo

3) Erstellen Sie den Benutzer.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

4) Stoppen Sie die MongoDB-Instanz und starten Sie sie erneut mit der Zugriffskontrolle.

mongod --auth --dbpath /data/db

5) Verbinden Sie sich und authentifizieren Sie sich als Benutzer.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

Lange Antwort: Lesen Sie dies, wenn Sie richtig verstehen wollen.

Es ist wirklich einfach. Ich werde das Folgende dumm machen https://docs.mongodb.com/manual/tutorial/enable-authentication/

Wenn Sie mehr darüber erfahren möchten, was die Rollen tatsächlich tun, lesen Sie hier mehr: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Starten Sie MongoDB ohne Zugriffskontrolle.

mongod --dbpath /data/db

2) Stellen Sie eine Verbindung zur Instanz her.

mongo

3) Erstellen Sie den Benutzeradministrator. Im Folgenden wird ein Benutzeradministrator in der adminAuthentifizierungsdatenbank erstellt. Der Benutzer ist dbOwnerüber die some_dbDatenbank und NICHT über die adminDatenbank, dies ist wichtig zu beachten.

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

Oder wenn Sie einen Administrator erstellen möchten, der über eine beliebige Datenbank verwaltet wird:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4) Stoppen Sie die MongoDB-Instanz und starten Sie sie erneut mit der Zugriffskontrolle.

mongod --auth --dbpath /data/db

5) Verbinden und authentifizieren Sie sich als Benutzeradministrator mit der adminAuthentifizierungsdatenbank, NICHT mit der some_dbAuthentifizierungsdatenbank. Der Benutzeradministrator wurde in der adminAuthentifizierungsdatenbank erstellt, der Benutzer ist in der some_dbAuthentifizierungsdatenbank nicht vorhanden .

use admin
db.auth("myDbOwner", "abc123")

Sie werden jetzt als dbOwnerOver-the- some_dbDatabase authentifiziert . Wenn Sie also direkt in Richtung some_dbDatenbank lesen / schreiben / arbeiten möchten, können Sie zu dieser wechseln.

use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.

Weitere Informationen zu Rollen: https://docs.mongodb.com/manual/reference/built-in-roles/

Wenn Sie zusätzliche Benutzer erstellen möchten, die keine Benutzeradministratoren sind und nur normale Benutzer sind, lesen Sie weiter unten.

6) Erstellen Sie einen normalen Benutzer. Dieser Benutzer wird in der some_dbAuthentifizierungsdatenbank unten erstellt.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

7) Verlassen Sie die Mongo-Shell, stellen Sie die Verbindung wieder her und authentifizieren Sie sich als Benutzer.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
K - Die Toxizität in SO nimmt zu.
quelle
2
Endlich habe ich eine Idee, was wirklich passiert.
am
stackoverflow.com/questions/41615574/…
K - Die Toxizität in SO nimmt zu.
3
Ich wünsche mir, dass akzeptierte Antworten auf SO aktualisiert werden. Dies ist die relevanteste Lösung ab Juli 2017.
Azatar
1
Bitte aktualisieren Sie Ihre Antwort! Ich weiß nicht, woher Sie userAdminAnyDatabase haben, aber es funktioniert nicht. Die Rolle ist root für den Administratorzugriff über alle Datenbank.
Aakash Verma
@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) VERWENDEN SIE ROOT NIEMALS , außer für Entwicklungszwecke, bei denen Sie wissen, dass Sie nicht gefährdet werden können! (tbh benutze einfach nie root lol)
K - Die Toxizität in SO wächst.
63

#auth=trueDeaktivieren Sie zunächst die Zeile, mit der in Ihrer Mongod-Konfigurationsdatei beginnt (Standardpfad /etc/mongo.conf). Dies ermöglicht die Authentifizierung für Mongodb.

Starten Sie dann mongodb neu: sudo service mongod restart

Shnkc
quelle
10
Standardpfad ist /etc/mongod.confnicht/etc/mongo.conf
Mithril
2
oder erst auskommentieren, dann neu starten :)))
GioMac
2
Update: Starten Sie jetzt den Dienst neu mit: sudo service mongodb restart
sharafjaffri
Der Speicherort und Name der Konfigurationsdatei lautet: /etc/mongodb.conf
HGMamaci
46

Diese Antwort dient als Mongo 3.2.1- Referenz

Terminal 1:

$ mongod --auth

Terminal 2:

db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})

Wenn Sie ohne Rollen hinzufügen möchten (optional):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})

um zu überprüfen, ob authentifiziert oder nicht:

db.auth("admin_name", "1234")

es sollte dir geben:

1

sonst:

Error: Authentication failed.
0
Sdembla
quelle
2
ältere Versionen wie 2.4 würden db.addUser
arviman
Ich musste use adminvorher tippen, createUsersonst gab es einen Fehler.
Guillaume F.
28

Hier ist ein Javascript-Code zum Hinzufügen von Benutzern.

  1. Beginnen Sie mongodmit--auth = true

  2. Greifen Sie über die Mongo-Shell auf die Admin-Datenbank zu und übergeben Sie die Javascript-Datei.

    mongo admin "Dateiname.js"

    "Dateiname.js"

    // Adding admin user
    db.addUser("admin_username", " admin_password");
    // Authenticate admin user
    db.auth("admin_username ", " admin_password ");
    // use  database code from java script
    db = db.getSiblingDB("newDatabase");
    // Adding newDatabase database user  
    db.addUser("database_username ", " database_ password ");
  3. Nachdem das Hinzufügen des Benutzers abgeschlossen ist, können wir den Zugriff auf die Datenbank über die Mongo-Shell überprüfen

Bharadvaj
quelle
1
Das Festlegen von Benutzername und Kennwort in einer Datei sieht nicht sehr sicher aus.
Erkundung
Javascript. Nicht "Java-Skript".
Camilo Martin
Was ist der Zweck der Javascript-Datei hier?
Ravi
@CamiloMartin JavaScript, nicht "Javascript".
Madbreaks
10

Führen Sie zuerst mongoDB auf dem Terminal mit aus

mongod

Führen Sie nun die Mongo-Shell mit den folgenden Befehlen aus

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Starten Sie die MongoDB-Instanz mit der Zugriffssteuerung neu.

mongod --auth

Authentifizieren Sie sich jetzt über die Befehlszeile mit

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

Ich habe es gelesen

https://docs.mongodb.com/manual/tutorial/enable-authentication/

PRAVESH Kumar
quelle
1
Ich habe einen Benutzer mit root definiert und dann immer mehr hinzugefügt, bis ich dich finde. Die MongoDB Enterprise > db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "k96PCEflidMY5seVju+gAw==", "s toredKey" : "CabQTnJtny7cv0wT5X8oX9QOn3A=", "serverKey" : "RJyCdnlIhyIfj2+d44L61 bYK+MU=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdmin", "db" : "admin" }, { "role" : "userAdmin", "db" : "admin" }, { "role" : "root", "db" : "admin" } ] }Authentifizierung schlägt immer noch fehl
deadManN
Ich habe sogar db.changeUserPassword () verwendet, oder was auch immer es war, selbst danach, wenn ich db.auth ('admin', 'mein Pass') aufrufe oder wie Sie es getan haben, heißt es, dass die Authentifizierung für den Benutzer admin fehlgeschlagen ist
deadManN
Verwenden rootRolle kombinierten Zugang zu den Operationen und alle Ressourcen der folgenden Rollen bietet ... Rolle root
Laode Muhammad Al Fatih
8

Das habe ich unter Ubuntu 18.04 gemacht:

$ sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({  user: "root",  pwd: "rootpw",  roles: [ "root" ]  })  // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({  user: "lefa",  pwd: "lefapw",  roles: [ { role: "dbOwner", db: "lefa" } ]  }) // admin of a db
> exit
$ sudo vim /etc/mongodb.conf
auth = true
$ sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase  "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase  "lefa"
> use lefa
> exit
Jinmin
quelle
8

Du könntest dich ändern /etc/mongod.conf.

Vor

#security:

Nach

security:
    authorization: "enabled"

Dann sudo service mongod restart

Deusxmachine
quelle
5

Befolgen Sie die folgenden Schritte in der angegebenen Reihenfolge

  • Erstellen Sie einen Benutzer mithilfe der CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Aktivieren Sie die Authentifizierung. Die mongod --authVorgehensweise hängt von Ihrem Betriebssystem ab. Wenn Sie Windows verwenden, können Sie bei Linux einfach die /etc/mongod.confhinzuzufügende Datei bearbeitensecurity.authorization : enabled Die Vorgehensweise hängt und dann den mongd-Dienst neu starten
  • Verbindung über cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". Das ist es

Sie können diesen Beitrag lesen , um weitere Details zu erfahren und zu erfahren, wie Sie mit Mungo eine Verbindung herstellen können.

rahil471
quelle
4

Benutzererstellung mit Kennwort für eine bestimmte Datenbank zum Sichern des Datenbankzugriffs:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
Hasib Kamal
quelle
3

Diese Schritte haben bei mir funktioniert:

  1. schreibe mongod --port 27017 auf cmd
  2. Verbinden Sie sich dann mit der Mongo-Shell: mongo --port 27017
  3. Erstellen Sie den Benutzer admin: Verwenden Sie admin db.createUser ({Benutzer: "myUserAdmin", pwd: "abc123", Rollen: [{Rolle: "userAdminAnyDatabase", Datenbank: "admin"}]})
  4. Mongo Shell trennen
  5. Starten Sie den Mongodb neu: mongod --auth --port 27017
  6. Starten Sie die Mongo-Shell: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Um sich nach dem Verbinden zu authentifizieren, verbinden Sie die Mongo-Shell mit dem Mongod: mongo --port 27017
  8. Wechseln Sie zur Authentifizierungsdatenbank: Verwenden Sie admin db.auth ("myUserAdmin", "abc123").
Kevin Niasta
quelle
3

Die beste Vorgehensweise, um eine Verbindung zu mongoDB herzustellen, ist wie folgt:

  1. Nach der Erstinstallation

    use admin

  2. Führen Sie dann das folgende Skript aus, um einen Administrator zu erstellen

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

Das folgende Skript erstellt den Administrator für die Datenbank.

  1. Melden Sie sich mit db.admin an

    mongo -u YourUserName -p YourPassword admin

  2. Nach der Anmeldung können Sie eine N-Nummer der Datenbank mit demselben oder einem anderen Administrator-Berechtigungsnachweis erstellen, indem Sie die 1 bis 3 wiederholen.

Auf diese Weise können Sie unterschiedliche Benutzer und Kennwörter für die verschiedenen Sammlungen erstellen, die Sie in der MongoDB erstellen

Balaji.JB
quelle
Gehen Sie danach zu sudo nano /etc/mongod.conf und setzen Sie diese Zeile security.authorization: enabled. Den Referenzlink finden Sie hier: stackoverflow.com/a/57384027/3904109
DragonFire
2

Vergessen Sie nach dem Erstellen eines neuen Benutzers nicht grant read/write/root, dem Benutzer die Erlaubnis zu erteilen. Sie können das versuchen

cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])

Haisheng Yu
quelle