Cómo proteger MongoDB con nombre de usuario y contraseña
Quiero configurar la autenticación de nombre de usuario y contraseña para mi instancia de MongoDB, para que cualquier acceso remoto solicite el nombre de usuario y contraseña. Probé el tutorial desde el sitio de MongoDB e hice lo siguiente:
use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');
Después de eso, salí y corrí mongo de nuevo. Y no necesito contraseña para acceder a ella. Incluso si me conecto a la base de datos de forma remota, no se me solicita el nombre de usuario y la contraseña.
ACTUALIZAR Aquí está la solución que terminé usando
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
El nombre de usuario y la contraseña funcionarán de la misma manera para mongodump
y mongoexport
.
12 answers
Debe iniciar mongod
con la opción --auth
después de configurar el usuario.
Del Sitio MongoDB:
Ejecute la base de datos (proceso mongod) con la opción
--auth
para habilitar seguridad. Debe haber agregado un usuario a la base de datos de administración antes iniciar el servidor con--auth
, o añadir el primer usuario desde el interfaz localhost.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 18:57:07
Primero, des-comente la línea que comienza con #auth=true
en su archivo de configuración mongod (ruta predeterminada /etc/mongo.conf
). Esto habilitará la autenticación para mongodb.
Luego, reinicie mongodb: sudo service mongod restart
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-26 10:35:57
Esta respuesta es para Mongo 3.2.1 Referencia
Terminal 1:
$ mongod --auth
Terminal 2:
db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})
Si desea agregar sin roles (opcional):
db.createUser({user:"admin_name", pwd:"1234", roles:[]})
Para comprobar si está autenticado o no:
db.auth("admin_name", "1234")
Debería darte:
1
Else:
Error: Authentication failed.
0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 01:14:38
Wow tantas respuestas complicadas / confusas aquí.
Esto es a partir de v3.4.
Respuesta Corta.
1) Inicie MongoDB sin control de acceso.
mongod --dbpath /data/db
2) Conectarse a la instancia.
mongo
3) Crea el usuario.
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
4) Detenga la instancia de MongoDB e inicie de nuevo con control de acceso.
mongod --auth --dbpath /data/db
5) Conectarse y autenticarse como usuario.
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
Respuesta larga: Lea esto si desea correctamente entender.
Es realmente simple. Voy a silenciar a los siguientes https://docs.mongodb.com/manual/tutorial/enable-authentication /
Si desea obtener más información sobre lo que los roles realmente hacen, lea más aquí: https://docs.mongodb.com/manual/reference/built-in-roles/
1) Inicie MongoDB sin control de acceso.
mongod --dbpath /data/db
2) Conectarse a la instancia.
mongo
3) Cree el administrador de usuarios. Lo siguiente crea un administrador de usuario en la base de datos de autenticación admin
. El usuario es un dbOwner
sobre la base de datos some_db
y NO sobre la base de datos admin
, esto es importante de recordar.
use admin
db.createUser(
{
user: "myDbOwner",
pwd: "abc123",
roles: [ { role: "dbOwner", db: "some_db" } ]
}
)
O si desea crear un administrador que sea administrador sobre cualquier base de datos:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
4) Detenga la instancia de MongoDB e inicie de nuevo con control de acceso.
mongod --auth --dbpath /data/db
5) Conectarse y autenticarse como el administrador de usuarios hacia la base de datos de autenticación admin
, NO hacia la some_db
base de datos de autenticación. El administrador de usuarios fue creado en la base de datos de autenticación admin
, el usuario no existe en la base de datos de autenticación some_db
.
use admin
db.auth("myDbOwner", "abc123")
Ahora se autentica como dbOwner
sobre la base de datos some_db
. Así que ahora si desea leer / escribir / hacer cosas directamente hacia la base de datos some_db
puede cambiar a ella.
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.
Más sobre roles: https://docs.mongodb.com/manual/reference/built-in-roles /
Si desea hacer usuarios adicionales que no son administradores de usuarios y que son solo usuarios normales, siga leyendo a continuación.
6) Crea un usuario normal. Este usuario será creado en la base de datos de autenticación some_db
abajo.
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
7) Salga del shell de mongo, vuelva a conectarse, autenticarse como el usuario.
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-31 09:33:02
Aquí hay un código javascript para agregar usuarios.
Inicio
mongod
con--auth = true
-
Acceda a la base de datos admin desde mongo shell y pase el archivo javascript.
Mongo admin " Nombre de archivo.js "
" Nombre de archivo.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 ");
-
Ahora que se ha completado la adición de usuarios, podemos verificar el acceso a la base de datos desde mongo shell
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-23 00:10:01
Https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
Edite el archivo de configuración de mongo;
sudo nano /etc/mongod.conf
Añadir la línea:
security.authorization : enabled
Reinicie el servicio
sudo service mongod restart
Saludos
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-23 11:33:26
Primero ejecute MongoDB en la terminal usando
mongod
Ahora ejecute mongo shell use los siguientes comandos
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
Reinicie la instancia de MongoDB con control de acceso.
mongod --auth
Ahora authenticate desde la línea de comandos usando
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
Lo leí de
Https://docs.mongodb.com/manual/tutorial/enable-authentication /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-11 19:19:35
Tendrá que cambiar a la base de datos en la que desea que el usuario (no a la base de datos admin) ...
use mydatabase
Consulte esta publicación para obtener más ayuda ... http://learnmongo.com/posts/quick-tip-mongodb-users /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-04 21:29:38
Creación de usuarios con contraseña para una base de datos específica para asegurar el acceso a la base de datos:
use dbName
db.createUser(
{
user: "dbUser",
pwd: "dbPassword",
roles: [ "readWrite", "dbAdmin" ]
}
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-13 11:55:04
Estos pasos funcionaron en mí:
- escriba mongod port port 27017 en cmd
- luego conéctese al shell de mongo: mongo port puerto 27017
- crear el usuario admin : usar admin db.CreateUser( { usuario: "myUserAdmin", pwd: "abc123", roles: [{role: "userAdminAnyDatabase", db: "admin" } ] } )
- desconecte el shell de mongo
- reinicie el mongodb: mongod port auth port port 27017
- iniciar shell mongo : mongo port port 27017-u "myUserAdmin" - p " abc123 "authentic authenticationDatabase "admin"
- Para autenticarse después de la conexión, Conecte el shell de mongo al mongod: mongo port puerto 27017
- cambiar a la base de datos de autenticación : usar admin db.auth ("myUserAdmin"," abc123 "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-18 08:58:03
Después de crear un nuevo usuario, por favor, no se olvide de grant
read/write/root
permiso al usuario. puede probar el
cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-08 09:05:23
La mejor práctica para conectarse a MongoDB de la siguiente manera:
-
Después de la instalación inicial,
use admin
-
A continuación, ejecute el siguiente script para crear admin user
db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })
El siguiente script creará el usuario admin para la base de datos.
-
Inicie sesión en la base de datos.administración usando
mongo -u YourUserName -p YourPassword admin
Después de iniciar sesión, puede crear N número de la base de datos con la misma credencial de administrador o diferente repitiendo el 1 a 3.
Esto le permite crear diferentes usuarios y contraseñas para la colección diferente que crea en MongoDB
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-22 08:29:58