MongoDB - Erro "not authorized ... to execute command" [Resolvido]
Dica publicada em Banco de Dados / MongoDB
MongoDB - Erro "not authorized ... to execute command" [Resolvido]
Essa dica é meio que uma continuação da minha dica anterior, onde eu demonstro como criar um usuário "admin" para o seu MongoDB: MongoDB - Habilitar autenticação por usuário (Access Control) [Dica]
Pois bem, mesmo tendo criado o usuário com as devidas roles, na hora de deletar um banco de dados eu recebia o seguinte erro:
mongo -u fabio
> use bancoTeste
> db.dropDatabase()
{
"ok" : 0,
"errmsg" : "not authorized on bancoTeste to execute command { dropDatabase: 1.0, writeConcern: { w: \"majority\", wtimeout: 600000.0 }, lsid: { id: UUID(\"c67641b9-94c2-4192-b8c8-9f8c93e1b755\") }, $db: \"bancoTeste\" }",
"code" : 13,
"codeName" : "Unauthorized"
}
Para resolver esse problema, basta acrescentar a role "root" ao usuário criado. Exemplo:
mongo -u fabio
> use admin
> db.system.users.find().pretty()
{
...
"user" : "fabio",
...
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
}
]
}
> db.grantRolesToUser('fabio', [{ role: 'root', db: 'admin' }])
Verifique as roles do usuário:
> db.system.users.find().pretty()
{
...
"user" : "fabio",
...
"roles" : [
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
},
{
"role" : "root",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
E agora sim, temos as devidas permissões:
> use bancoTeste
> db.dropDatabase()
{ "dropped" : "bancoTeste", "ok" : 1 }
Até a próxima!
Pois bem, mesmo tendo criado o usuário com as devidas roles, na hora de deletar um banco de dados eu recebia o seguinte erro:
mongo -u fabio
> use bancoTeste
> db.dropDatabase()
{
"ok" : 0,
"errmsg" : "not authorized on bancoTeste to execute command { dropDatabase: 1.0, writeConcern: { w: \"majority\", wtimeout: 600000.0 }, lsid: { id: UUID(\"c67641b9-94c2-4192-b8c8-9f8c93e1b755\") }, $db: \"bancoTeste\" }",
"code" : 13,
"codeName" : "Unauthorized"
}
Para resolver esse problema, basta acrescentar a role "root" ao usuário criado. Exemplo:
mongo -u fabio
> use admin
> db.system.users.find().pretty()
{
...
"user" : "fabio",
...
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
}
]
}
> db.grantRolesToUser('fabio', [{ role: 'root', db: 'admin' }])
Verifique as roles do usuário:
> db.system.users.find().pretty()
{
...
"user" : "fabio",
...
"roles" : [
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
},
{
"role" : "root",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
E agora sim, temos as devidas permissões:
> use bancoTeste
> db.dropDatabase()
{ "dropped" : "bancoTeste", "ok" : 1 }
Até a próxima!
Boa dica.
___________________________________________________________