416 votes

Comment sécuriser MongoDB avec un nom d'utilisateur et un mot de passe ?

Je souhaite mettre en place une authentification par nom d'utilisateur et mot de passe pour mon instance MongoDB, afin que tout accès à distance demande le nom d'utilisateur et le mot de passe. J'ai essayé le tutoriel du site MongoDB et j'ai fait ce qui suit :

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

Après cela, je suis sorti et j'ai relancé mongo. Et je n'ai pas besoin de mot de passe pour y accéder. Même si je me connecte à la base de données à distance, aucun nom d'utilisateur ni mot de passe ne m'est demandé.


UPDATE Voici la solution que j'ai fini par utiliser

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

Le nom d'utilisateur et le mot de passe fonctionneront de la même manière pour les services suivants mongodump y mongoexport .

4 votes

Ceci pour MongDB version 2.2.x

29 votes

Dans Mongo 3.0.4, la commande pour créer un utilisateur est la suivante db.createUser() .

4 votes

Veuillez suivre cette procédure pour créer un utilisateur administrateur sur Mongodb 3.0. docs.mongodb.org/v3.0/tutorial/add-user-administrator

133voto

Alexandru Petrescu Points 1435

Vous devez commencer mongod avec le --auth après avoir configuré l'utilisateur.

Depuis le site MongoDB :

Exécutez la base de données (processus mongod) avec la commande --auth pour activer la la sécurité. Vous devez soit avoir ajouté un utilisateur à l'admin db avant de le démarrage du serveur avec --auth ou ajouter le premier utilisateur de l'interface interface localhost.

Authentification MongoDB

1 votes

J'ai essayé et suivi l'exemple. Maintenant je peux le définir après avoir redémarré le serveur avec --auth. Cependant, lorsque j'essaie de me connecter (./mongo -u theadmin -p 12345 ), j'échoue. Je ne peux pas me connecter.

0 votes

Si après avoir fait cela vous ne pouvez pas vous connecter, c'est que vous essayez de vous connecter sur le admin db, utilisez un autre db et réessayez. Seul un userAdmin(AnyDatabase) peut se connecter sur admin .

109voto

Karl Morrison Points 774

Wow, tant de réponses compliquées/confuses ici.

Ceci est en date du v3.4 .

Réponse courte.

1) Démarrez MongoDB sans contrôle d'accès.

mongod --dbpath /data/db

2) Connectez-vous à l'instance.

mongo

3) Créez l'utilisateur.

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

4) Arrêtez l'instance MongoDB et redémarrez-la avec un contrôle d'accès.

mongod --auth --dbpath /data/db

5) Connectez-vous et authentifiez-vous en tant qu'utilisateur.

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

Réponse longue : Lisez ceci si vous voulez bien comprendre.

C'est très simple. Je vais simplifier ce qui suit https://docs.mongodb.com/manual/tutorial/enable-authentication/

Si vous souhaitez en savoir plus sur le rôle réel de ces fonctions, cliquez ici : https://docs.mongodb.com/manual/reference/built-in-roles/

1) Démarrez MongoDB sans contrôle d'accès.

mongod --dbpath /data/db

2) Connectez-vous à l'instance.

mongo

3) Créez l'utilisateur administrateur. _L'exemple suivant crée un utilisateur administrateur dans la section admin base de données d'authentification. L'utilisateur est un dbOwner sur le some_db et NON sur la base de données admin base de données, il est important de s'en souvenir._

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

Ou si vous voulez créer un administrateur qui est administrateur de n'importe quelle base de données :

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

4) Arrêtez l'instance MongoDB et redémarrez-la avec un contrôle d'accès.

mongod --auth --dbpath /data/db

5) Connectez-vous et authentifiez-vous en tant qu'administrateur de l'utilisateur vers le admin la base de données d'authentification, PAS vers la some_db base de données d'authentification. _L'utilisateur administrateur a été créé dans le admin la base de données d'authentification, l'utilisateur n'existe pas dans la base de données d'authentification. some_db base de données d'authentification._

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

_Vous êtes maintenant authentifié en tant que dbOwner sur le some_db base de données. Donc maintenant si vous souhaitez lire/écrire/faire des choses directement vers la some_db vous pouvez changer de base de données._

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.

Plus sur les rôles : https://docs.mongodb.com/manual/reference/built-in-roles/

Si vous souhaitez créer des utilisateurs supplémentaires qui ne sont pas des administrateurs d'utilisateurs et qui sont juste des utilisateurs normaux, continuez à lire ci-dessous.

6) Créez un utilisateur normal. _Cet utilisateur sera créé dans le some_db base de données d'authentification ci-dessous._

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

7) Quittez le shell mongo, reconnectez-vous, authentifiez-vous en tant qu'utilisateur.

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

2 votes

J'ai enfin une idée de ce qui se passe réellement.

0 votes

3 votes

Je me retrouve à souhaiter que les réponses acceptées puissent être rafraîchies sur SO. Il s'agit de la solution la plus pertinente en date de juillet 2017.

70voto

Shnkc Points 520

Tout d'abord, décommentez la ligne qui commence par #auth=true dans votre fichier de configuration mongod (chemin par défaut /etc/mongod.conf ). Cela permettra d'activer l'authentification pour mongodb.

Ensuite, redémarrez mongodb : sudo service mongod restart

13 votes

Le chemin par défaut est /etc/mongod.conf pas /etc/mongo.conf

2 votes

Ou, d'abord décommenter, puis redémarrer :)))

2 votes

Mise à jour : Redémarrez maintenant le service avec : sudo service mongodb restart

49voto

Sdembla Points 1001

Cette réponse est pour Mongo 3.2.1 Référence

Terminal 1 :

$ mongod --auth

Terminal 2 :

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

si vous voulez ajouter des sans rôles (facultatif) :

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

pour vérifier si elle est authentifiée ou non :

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

qu'il devrait vous donner :

1

autre :

Error: Authentication failed.
0

2 votes

Les versions plus anciennes, comme la 2.4, utilisent db.addUser.

0 votes

J'ai dû taper use admin avant createUser sinon il a donné une erreur.

28voto

Bharadvaj Points 151

Voici un code javascript pour ajouter des utilisateurs.

  1. Début mongod con --auth = true

  2. Accéder à la base de données admin depuis le shell mongo et passer le fichier javascript.

    mongo admin "Nom-de-film.js"

    "Filename.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. Maintenant que l'ajout d'utilisateurs est terminé, nous pouvons vérifier l'accès à la base de données depuis le shell mongo.

2 votes

La définition du nom d'utilisateur et du mot de passe dans un fichier ne semble pas très sûre.

0 votes

Javascript. Pas "java script".

0 votes

Quel est le but du fichier javascript ici ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X