Estoy tratando de agregar autorización a mi MongoDB.
Estoy haciendo todo esto en Linux con MongoDB 2.6.1.
Mi archivo mongod.conf tiene el formato de compatibilidad anterior
(así es como vino con la instalación).
1) Creé un usuario administrador como se describe aquí en (3)
http://docs.mongodb.org/manual/tutorial/add-user-administrator/
2) Luego edité mongod.conf al descomentar esta línea
auth = true
3) Finalmente reinicié el servicio mongod e intenté iniciar sesión con:
/usr/bin/mongo localhost:27017/admin -u sa -p pwd
4) Puedo conectarme pero dice esto al conectar.
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
5) Ahora parece que este sa
usuario que creé no tiene permisos en absoluto.
root@test02:~# mc
MongoDB shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
"$err" : "not authorized for query on admin.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
"$err" : "not authorized for query on test.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>
¿Cuál es el problema? Repetí todo este procedimiento 3 veces y
creo que lo hice todo como se especifica en los documentos de MongoDB. Pero no funciona.
Esperaba que este sa
usuario estuviera autorizado a hacer cualquier cosa para
poder crear otros usuarios y otorgarles permisos más específicos.
Respuestas:
También me estaba rascando la cabeza sobre el mismo problema, y todo funcionó después de establecer el rol como root cuando agregué el primer usuario administrador.
Si ya ha creado el
admin
usuario, puede cambiar la función de esta manera:Para obtener una referencia de configuración de autenticación completa, consulte los pasos que he compilado después de horas de investigación en Internet.
fuente
userAdminAnyDatabase
lugar deroot
?db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
y que me hace confuso. No estoy autorizado para ejecutar un comando y, sin embargo, puedo ejecutar un comando para hacerme root y luego ejecutar ese comando. Muy extraño: Sdb.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
no funcionó, asegúrese de volver ause admin
... tenía el mismo problema, una vez que volví a funcionar funcionó deEs un poco confuso: creo que tendrá que concederse readWrite para consultar una base de datos. Un usuario con dbadmin o useradmin puede administrar la base de datos (incluida la concesión de derechos adicionales) pero no puede realizar consultas ni escribir datos.
así que concédete readWrite y deberías estar bien -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
fuente
Quizás un ejemplo rápido de cómo cambiar un usuario actual sea útil para alguien. Esto es lo que realmente estaba buscando.
Siguiendo los consejos de @JohnPetrone, agregué el rol readWrite a mi usuario administrador con grantRolesToUser
fuente
Puede intentar: Usar el indicador --authenticationDatabase ayuda.
fuente
Sé que esta respuesta llega muy tarde en este hilo, pero espero que la revisen.
La razón por la que obtiene ese error se basa en el rol específico que otorgó al usuario, que ya ha reunido hasta ahora, y sí, darle al usuario el rol
root
resolverá su problema, pero primero debe comprender qué hacen estos roles exactamente antes de otorgarles a los usuariosEn el tutorial, le otorgó al usuario el
userAdminAnyDatabase
rol que básicamente le da al usuario la capacidad de administrar usuarios de todas sus bases de datos. Lo que intentaba hacer con su usuario estaba fuera de su definición de rol.El
root
papel tiene esta función se incluye en ella definición, así como elreadWriteAnyDatabase
,dbAdminAnyDatabase
y otros papeles por lo que es un superusuario (básicamente porque se puede hacer nada con ella).Puede consultar las definiciones de roles para ver qué roles necesitará darle a los usuarios para completar ciertas tareas. https://docs.mongodb.com/manual/reference/built-in-roles/ No es recomendable hacer que todos tus usuarios sean super :)
fuente
show collections
), debe darle esa habilidad y nada másroles: [ { role: "read", db: "admin" } ]
. Observe que el rol aquí es leído, esto es específico de la base de datos y no puede hacer nada más que eso. Consulte este enlace para ver otros roles docs.mongodb.com/manual/reference/built-in-rolesEs una pregunta simple.
o
fuente
Tuve un problema similar aquí en un entorno Windows: instalé Bitnami DreamFactory y también instala otro MongoDb que se inicia en el arranque del sistema. Estaba ejecutando mi MongoDbService (que se inició sin ningún error) pero después de perder mucho tiempo noté que, de hecho, me estaba conectando al servicio MongoDb de Bitnami. Por favor, eche un vistazo si no hay otra instancia de mongoDB ejecutándose en su servidor.
¡Buena suerte!
fuente
Además, tenga en cuenta que si su cliente shell mongo no se conecta correctamente a la
mongod
instancia, puede recibir dichos errores de "Permiso denegado".Asegúrese de que su cliente abra una conexión comprobando el puerto de conexión, pero también de que el puerto que está utilizando
mongod
no está en uso. Puede establecer un puerto diferente utilizando el--port <port>
parámetro tanto en el shell como en el proceso.fuente
Tuve este problema debido a que el nombre de host en mi MongoDB Compass apuntaba a admin para mi proyecto. Se solucionó agregando / projectname después del nombre de host :) Intente esto:
Use la misma cadena de conexión en su código también:
Buena suerte.
fuente
fuente
Convino en que debe autenticarse en admin db y necesita al menos un rol con los privilegios correctos que evitaría la 'excepción de host local' de DB (esto es para las instalaciones alojadas de mongoDB), aunque tiene todo en su lugar y aún obteniendo excepciones no autorizadas en casi todos los comandos, al acceder a mongoDB que se creó usando Mongo Atlas , entonces aquí está el lugar donde puede saber la razón, por qué:
/dba/219003/not-authorized-on-admin-to-execute-command-mongodb-atlas-m0-free-tier-cluster?newreg=471a9a26108243d78d4ca74a87e7a115
y también verifique esto si ha alojado mongoDB en mongo Atlas :
https://docs.atlas.mongodb.com/unsupported-commands/
fuente
fuente
Seguí estos pasos en Centos 7 para MongoDB 4.2. (Usuario remoto)
Actualizar el archivo mongod.conf
Iniciar servicio demonio MongoDB
Abrir shell MongoDB
Ejecute este comando en el shell
Se ha creado un usuario root remoto. Ahora puede probar esta conexión de base de datos utilizando cualquier herramienta de GUI MongoDB de su máquina de desarrollo. Me gusta Robo 3T
fuente
Esto puede deberse a que no ha establecido noAuth = true en mongodb.conf
Después de configurar esto, reinicie el servicio usando
servicio mongod reiniciar
fuente