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

3voto

ma_jafari Points 934

C'est ce que j'ai fait pour ubuntu 20.04 et mongodb enterprise 4.4.2 :

  1. lancez le shell mongo en tapant mongo dans le terminal.

  2. utiliser la base de données admin :

    use admin

  3. créer un nouvel utilisateur et lui attribuer le rôle que vous souhaitez :

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

  4. quittez mongo et ajoutez la ligne suivante à etc/mongod.conf :

    security: authorization: enabled

  5. redémarrer le serveur mongodb

(facultatif) 6. si vous voulez que votre utilisateur ait un accès Root, vous pouvez soit le spécifier lors de la création de votre utilisateur comme :

db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(), // or cleartext password
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

ou vous pouvez changer le rôle de l'utilisateur en utilisant :

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

2voto

Haisheng Yu Points 151

Après avoir créé le nouvel utilisateur, n'oubliez pas de grant read/write/root à l'utilisateur. Vous pouvez essayer l'option

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

0voto

Wernfried Points 2508

Beaucoup de réponses dupliquées mais je pense qu'elles manquent une note importante :

Même lorsque l'authentification est correctement activée, vous pouvez vous connecter à la base de données Mongo sans nom d'utilisateur/mot de passe !

Cependant, vous ne pouvez exécuter que des commandes inoffensives comme db.help() , db.getMongo() , db.listCommands() etc.

$ mongo 
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f662858b-8658-4e33-a735-120e3639c131") }
MongoDB server version: 4.4.3
mongos> db.getMongo()
connection to 127.0.0.1:27017
mongos> db
test
mongos> db.version()
4.4.3
mongos> db.runCommand({connectionStatus : 1})
{
        "authInfo" : {
                "authenticatedUsers" : [ ],
                "authenticatedUserRoles" : [ ]
        },
        "ok" : 1,
        "operationTime" : Timestamp(1618996970, 2),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1618996970, 2),
                "signature" : {
                        "hash" : BinData(0,"Kre9jvnJvsW+OVCl1QC+eKSBbbY="),
                        "keyId" : NumberLong("6944343118355365892")
                }
        }
}

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