Comment sécuriser MongoDB avec nom d'utilisateur et mot de passe
je veux configurer l'authentification nom d'utilisateur et mot de passe pour mon instance MongoDB, de sorte que tout accès à distance demandera le nom d'utilisateur et mot de passe. J'ai essayé le tutoriel sur le site de MongoDB et j'ai fait:
use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');
après ça, je suis ressorti et j'ai repris 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é pour le nom d'utilisateur et le mot de passe.
mise à JOUR 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 façon pour mongodump
et mongoexport
.
12 réponses
vous devez démarrer mongod
avec l'option --auth
après avoir configuré l'utilisateur.
du Site de MongoDB:
exécutez la base de données (processus mongod) avec l'option
--auth
pour activer sécurité. Vous devez avoir ajouté un utilisateur à la base de données admin avant démarrer le serveur avec--auth
, ou ajouter le premier utilisateur à partir de la interface localhost.
tout d'abord, désactivez la ligne qui commence par #auth=true
dans votre fichier de configuration mongod (chemin par défaut /etc/mongo.conf
). Ceci activera l'authentification pour mongodb.
puis, redémarrez mongodb: sudo service mongod restart
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 sans rôles (facultatif):
db.createUser({user:"admin_name", pwd:"1234", roles:[]})
pour vérifier s'il est authentifié ou non:
db.auth("admin_name", "1234")
il devrait vous donner:
1
else:
Error: Authentication failed.
0
Wow, donc beaucoup de compliqué/confus réponses ici.
c'est à partir de v3.4 .
courte réponse.
1) Démarrer MongoDB sans contrôle d'accès.
mongod --dbpath /data/db
2) Connectez-vous à l'instance.
mongo
3) Créer 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êter L'instance MongoDB et commencer à nouveau avec le contrôle d'accès.
mongod --auth --dbpath /data/db
5) Se connecter et s'authentifier en tant qu'utilisateur.
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
longue réponse: lisez ceci si vous voulez bien comprendre.
c'est très simple. Je vais débiter le suivant https://docs.mongodb.com/manual/tutorial/enable-authentication/
si vous voulez en savoir plus sur ce que les rôles font réellement lire la suite: https://docs.mongodb.com/manual/reference/built-in-roles/
1) Démarrer MongoDB sans contrôle d'accès.
mongod --dbpath /data/db
2) Connectez-vous à l'instance.
mongo
3) Créer l'administrateur utilisateur. ce qui suit crée un administrateur d'utilisateur dans la base de données d'authentification admin
. L'utilisateur est un dbOwner
sur le some_db
il est important de se souvenir de cette information, et non de la base de données admin
.
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 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 avec le contrôle d'accès.
mongod --auth --dbpath /data/db
5) Se connecter et s'authentifier en tant qu'administrateur utilisateur vers la base de données d'authentification admin
, et non vers le some_db
base de données d'authentification. l'Administrateur Utilisateur 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é comme un dbOwner
sur la base de données some_db
. Donc maintenant, si vous souhaitez lire/écrire/faire des choses directement vers la base de données some_db
, vous pouvez le modifier.
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.
pour en savoir plus sur les rôles: https://docs.mongodb.com/manual/reference/built-in-roles/
si vous souhaitez faire des utilisateurs supplémentaires qui ne sont pas des administrateurs d'utilisateurs et qui sont juste des utilisateurs normaux continuer la lecture 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) quitter le shell mongo, se reconnecter, authentifier en tant qu'utilisateur.
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
Voici un code javascript pour ajouter des utilisateurs.
-
Démarrer
mongod
avec--auth = true
-
accédez à la base de données admin de Mongo shell et passez le fichier javascript.
mongo admin" Nom du fichier.js"
" nom du 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 ");
-
maintenant que l'ajout d'utilisateur est terminé, nous pouvons vérifier l'accès à la base de données de Mongo shell
https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
modifier le fichier Mongo settings;
sudo nano /etc/mongod.conf
ajouter la ligne:
security.authorization : enabled
redémarrer le service
sudo service mongod restart
concerne
de la Première exécution de mongoDB sur la borne à l'aide de
mongod
utilisez maintenant les commandes suivantes ""
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
redémarre L'instance MongoDB avec contrôle d'accès.
mongod --auth
authentifiez-vous maintenant depuis 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/
vous aurez besoin de passer à la base de données que vous voulez que l'utilisateur sur (pas l'administrateur db) ...
use mydatabase
Voir ce post pour plus d'aide ... http://learnmongo.com/posts/quick-tip-mongodb-users /
création D'un utilisateur avec mot de passe pour une base de données spécifique pour sécuriser l'accès à la base de données :
use dbName
db.createUser(
{
user: "dbUser",
pwd: "dbPassword",
roles: [ "readWrite", "dbAdmin" ]
}
)
ces étapes ont fonctionné sur moi:
- écrire mongod --port 27017 sur cmd
- puis connecter à Mongo shell: mongo --port 27017
- créer l'administrateur utilisateur : utilisez admin DB.createUser( { utilisateur: "myUserAdmin", pwd: "abc123", rôles: [{ rôle: "userAdminAnyDatabase", db: "admin" } ] } )
- déconnecter Mongo shell
- restart the mongodb: mongod --auth --port 27017
- démarrer le shell mongo : mongo --port 27017-u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
- pour authentifier après la connexion, Connecter le shell mongo au mongod: mongo -- port 27017
- passer à la base de données d'authentification : utilisez admin DB.auth ("myUserAdmin"," abc123 "
après que vous créez un nouvel utilisateur, s'il vous plaît ne pas oublier de grant
read/write/root
permission à l'utilisateur. vous pouvez essayer le
cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])
La meilleure pratique pour se connecter à mongoDB comme suit:
-
après l'installation initiale,
use admin
-
ensuite, exécutez le script suivant pour créer administrateur utilisateur
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 administrateur de la base de données.
-
se connecter à la db.admin utilisant
mongo -u YourUserName -p YourPassword admin
-
après la connexion, vous pouvez créer N numéro de la base de données avec le même identifiant d'administrateur ou différent en répétant le 1 à 3.
cela vous permet de créer un utilisateur et un mot de passe différents pour la collection différente que vous créez dans le MongoDB