MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

show dbs dá não autorizado a executar o erro de comando


Você deve ter iniciado a instância do mongod com controle de acesso, ou seja, a opção de linha de comando --auth, como:
$ mongod --auth

Vamos iniciar o shell mongo e criar um administrador no banco de dados admin:
$ mongo
> use admin
> db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Agora, se você executar o comando "db.stats()" ou "mostrar usuários", receberá o erro "não autorizado no administrador para executar o comando..."
> db.stats()
{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined }",
        "code" : 13,
        "codeName" : "Unauthorized"
}

O motivo é que você ainda não concedeu a função "read" ou "readWrite" ao usuário myUserAdmin. Você pode fazer como abaixo:
> db.auth("myUserAdmin", "abc123")
> db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])

Agora você pode verificar (o comando "show users" agora funciona):
> show users
{
        "_id" : "admin.myUserAdmin",
        "user" : "myUserAdmin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "read",
                        "db" : "admin"
                },
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}

Agora, se você executar "db.stats()", também ficará bem:
> db.stats()
{
        "db" : "admin",
        "collections" : 2,
        "views" : 0,
        "objects" : 3,
        "avgObjSize" : 151,
        "dataSize" : 453,
        "storageSize" : 65536,
        "numExtents" : 0,
        "indexes" : 3,
        "indexSize" : 81920,
        "ok" : 1
}

Esse mecanismo de usuário e função também pode ser aplicado a qualquer outro banco de dados no MongoDB, além do banco de dados admin.

(MongoDB versão 3.4.3)