web-dev-qa-db-fra.com

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

Je souhaite configurer l'authentification du nom d'utilisateur et du mot de passe pour mon instance MongoDB, afin que tout accès distant demande le nom d'utilisateur et le mot de passe. J'ai essayé le tutoriel du site MongoDB et ai fait les choses suivantes:

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

Après cela, je suis sorti et j'ai de nouveau couru le 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, je ne suis pas invité à entrer le nom d'utilisateur et le mot de passe.


UPDATE Voici la solution que j'ai finalement utilisée

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 mongodump et mongoexport.

350
murvinlai

Vous devez démarrer mongod avec l'option --auth après avoir configuré l'utilisateur.

Depuis le site MongoDB:

Exécutez la base de données (processus Mongod) avec l'option --auth pour activer la sécurité. Vous devez soit avoir ajouté un utilisateur à la base de données d'administration avant de démarrer le serveur avec --auth, soit ajouter le premier utilisateur à partir de l'interface localhost.

Authentification MongoDB

104
Alexandru Petrescu

Wow tellement de réponses compliquées/confuses ici.

C'est à partir de 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 le 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 vraiment simple. Je vais faire la bêtise suivante https://docs.mongodb.com/manual/tutorial/enable-authentication/

Si vous voulez en savoir plus sur ce que font réellement les rôles, lisez-en plus 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'administrateur de l'utilisateur. Ce qui suit crée un utilisateur administrateur dans la base de données d'authentification admin. L'utilisateur est un dbOwner sur la base de données some_db et PAS sur la base de données admin, 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 sur une 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 le contrôle d'accès.

mongod --auth --dbpath /data/db

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

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

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

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éer un utilisateur normal. Cet utilisateur sera créé dans la base de données d'authentification some_db 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({})
64
Karl Morrison

Commencez par commenter la ligne commençant par #auth=true dans votre fichier de configuration Mongod (chemin par défaut /etc/mongo.conf). Cela activera l'authentification pour mongodb.

Ensuite, redémarrez mongodb: Sudo service mongod restart

60
Shnkc

Cette réponse concerne 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 sans rôles (facultatif):

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

pour vérifier si authentifié ou non:

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

cela devrait vous donner:

1

autre :

Error: Authentication failed.
0
43
Sdembla

Voici un code javascript pour ajouter des utilisateurs.

  1. Démarrer mongod avec --auth = true

  2. Accédez à la base de données d'administration depuis le shell mongo et transmettez le fichier javascript.

    mongo admin "Nomfichier.js"

    "Nom de fichier.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 à partir de mongo Shell.

26
Bharadvaj

https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization

Editez le fichier de paramètres mongo;

Sudo nano /etc/mongod.conf

Ajouter la ligne:

security.authorization : enabled

Redémarrer le service

Sudo service mongod restart

Cordialement

11
alicanozkara

Commencez par exécuter mongoDB sur un terminal en utilisant

mongod

exécutez maintenant mongo Shell utilisez les commandes suivantes

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

Redémarrez l'instance MongoDB avec le contrôle d'accès.

mongod --auth

Maintenant, authentifiez-vous à partir de la ligne de commande en utilisant

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

Je l'ai lu de

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

8
PRAVESH kumar

Création d'un utilisateur avec mot de passe pour une base de données spécifique afin de sécuriser l'accès à la base de données:

use dbName

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

Vous aurez besoin de passer à la base de données sur laquelle vous voulez que l'utilisateur (pas la base d'administration) ...

use mydatabase

Voir ce post pour plus d'aide ... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/

3
Justin Jenkins

Suivez les étapes ci-dessous dans l'ordre

  • Créer un utilisateur à l'aide de la CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Activez l'authentification, la manière dont vous le faites diffère selon votre système d'exploitation. Si vous utilisez Windows, vous pouvez simplement mongod --auth en cas de Linux, vous pouvez modifier le fichier /etc/mongod.conf pour ajouter security.authorization : enabled, puis le redémarrer. le service mongd
  • Pour vous connecter via cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". C'est ça

Vous pouvez vérifier cet article pour entrer dans plus de détails et apprendre à vous y connecter en utilisant mangouste.

2
rahil471

Ces étapes ont fonctionné sur moi:

  1. écrire mongod --port 27017 sur cmd
  2. puis connectez-vous à mongo Shell: mongo --port 27017
  3. créer l'utilisateur admin: utilisez admin db.createUser ({utilisateur: "myUserAdmin", pwd: "abc123", rôles: [{rôle: "userAdminAnyDatabase", db: "admin"}]})
  4. déconnecter mongo shell
  5. redémarrez le mongodb: mongod --auth --port 27017
  6. démarrer mongo Shell: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Pour vous authentifier après la connexion, connectez le shell mongo au mongod: mongo --port 27017
  8. basculez vers la base de données d'authentification: utilisez admin db.auth ("myUserAdmin", "abc123"
2
Kevin Niasta

La meilleure pratique pour se connecter à mongoDB est la suivante:

  1. Après l'installation initiale,

    use admin

  2. Puis exécutez le script suivant pour créer un utilisateur admin

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

le script suivant créera l'utilisateur admin pour la base de données.

  1. connectez-vous au fichier db.admin en utilisant

    mongo -u YourUserName -p YourPassword admin

  2. Après la connexion, vous pouvez créer le numéro N de la base de données avec les mêmes identifiants d’administrateur ou différents en répétant les étapes 1 à 3.

Cela vous permet de créer différents utilisateurs et mots de passe pour les différentes collections que vous créez dans MongoDB.

1
Balaji.J.B

Voici ce que j'ai fait sur Ubuntu 18.04:

$ 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
1
Jinmin

après avoir créé un nouvel utilisateur, n'oubliez pas de donner l'autorisation grantread/write/root à l'utilisateur. vous pouvez essayer le

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

1
Haisheng Yu