show dbs gives “Not Authorized to execute command” error

前端 未结 7 1359
暖寄归人
暖寄归人 2020-12-24 13:42

I\'ve spent some time trying to figure out what is wrong but as I could not find out, I decided to ask here.

I am running MongoDB(Windows 64-bit 2008 R2+) version 3.

7条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-24 14:23

    You should have started the mongod instance with access control, i.e., the --auth command line option, such as:

    $ mongod --auth
    

    Let's start the mongo shell, and create an administrator in the admin database:

    $ mongo
    > use admin
    > db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
    

    Now if you run command "db.stats()", or "show users", you will get error "not authorized on admin to execute command..."

    > db.stats()
    {
            "ok" : 0,
            "errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined }",
            "code" : 13,
            "codeName" : "Unauthorized"
    }
    

    The reason is that you still have not granted role "read" or "readWrite" to user myUserAdmin. You can do it as below:

    > db.auth("myUserAdmin", "abc123")
    > db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])
    

    Now You can verify it (Command "show users" now works):

    > show users
    {
            "_id" : "admin.myUserAdmin",
            "user" : "myUserAdmin",
            "db" : "admin",
            "roles" : [
                    {
                            "role" : "read",
                            "db" : "admin"
                    },
                    {
                            "role" : "userAdminAnyDatabase",
                            "db" : "admin"
                    }
            ]
    }
    

    Now if you run "db.stats()", you'll also be OK:

    > db.stats()
    {
            "db" : "admin",
            "collections" : 2,
            "views" : 0,
            "objects" : 3,
            "avgObjSize" : 151,
            "dataSize" : 453,
            "storageSize" : 65536,
            "numExtents" : 0,
            "indexes" : 3,
            "indexSize" : 81920,
            "ok" : 1
    }
    

    This user and role mechanism can be applied to any other databases in MongoDB as well, in addition to the admin database.

    (MongoDB version 3.4.3)

提交回复
热议问题