ver usuarios remota puerto datos create crear creacion conexión activar mongodb user rbac

usuarios - ¿Cómo cambias los permisos de usuario de MongoDB?



puerto 27017 mongodb (2)

Ver operadores de actualización de matriz .

> db.users.findOne() { "_id" : ObjectId("51e3e2e16a847147f7ccdf7d"), "user" : "testAdmin", "pwd" : "[some hash]", "roles" : [ "clusterAdmin" ], "otherDBRoles" : { "TestDB" : [ "readWrite" ] } } > db.users.update({"user" : "testAdmin"}, {$addToSet: {''otherDBRoles.TestDB'': ''dbAdmin''}}, false, false) > db.users.findOne() { "_id" : ObjectId("51e3e2e16a847147f7ccdf7d"), "user" : "testAdmin" "pwd" : "[some hash]", "roles" : [ "clusterAdmin" ], "otherDBRoles" : { "TestDB" : [ "readWrite", "dbAdmin" ] }, }

Actualización :

MongoDB comprueba el permiso en cada acceso. Si ve el operador db.changeUserPassword :

> db.changeUserPassword function (username, password) { var hashedPassword = _hashPassword(username, password); db.system.users.update({user : username, userSource : null}, {$set : {pwd : hashedPassword}}); var err = db.getLastError(); if (err) { throw "Changing password failed: " + err; } }

Verá - el operador cambia el documento del usuario.

Consulte también Documentos de privilegios de system.users y credenciales delegadas para la autenticación de MongoDB

Por ejemplo, si tengo este usuario:

> db.system.users.find() { "user" : "testAdmin", "pwd" : "[some hash]", "roles" : [ "clusterAdmin" ], "otherDBRoles" : { "TestDB" : [ "readWrite" ] } }

Y quiero darle a ese usuario los permisos dbAdmin en la TestDB datos TestDB , puedo eliminar el registro del usuario y luego volver a agregarlo con los nuevos permisos:

> db.system.users.remove({"user":"testAdmin"}) > db.addUser( { user: "testAdmin", pwd: "[whatever]", roles: [ "clusterAdmin" ], otherDBRoles: { TestDB: [ "readWrite", "dbAdmin" ] } } )

Pero eso parece hacky y propenso a errores.

Y puedo actualizar el registro de la tabla en sí:

> db.system.users.update({"user":"testAdmin"}, {$set:{ otherDBRoles: { TestDB: [ "readWrite", "dbAdmin" ] }}})

Pero no estoy seguro de si eso realmente crea los permisos correctos, se ve bien, pero puede estar sutilmente mal.

¿Hay una mejor manera de hacer esto?


Si solo quiere actualizar el Rol del Usuario. Puedes hacerlo de la siguiente manera

db.updateUser( "userName", { roles : [ { role : "dbAdmin", db : "dbName" }, { role : "readWrite", db : "dbName" } ] } )

Nota: - Esto anulará solo los roles para ese usuario.