"未授权"从mongo shell查询时出错,RoboMongo正常工作

时间:2017-06-13 13:57:20

标签: mongodb mongodb-roles

我在mongodb上为db "test_user"创建了一个用户"test_db",并授予了readWrite角色,如下所示

db.createUser(
   {
      user : "test_user",
      pwd : "password",
      roles : [
        {
           role : "readWrite",
           db : "test_db"
        }
     ]
  }
)

Mongo说Successfully added user

一切都很好,我使用RoboMongo连接到我的数据库,并且能够创建和列出集合。

但是当我使用shell从我的机器连接到mongo时如下

mongo -u 'test_user' --authenticationDatabase 'test_db' -p 'password'

我无法列出或创建集合。 Mongo说

 E QUERY    [thread1] Error: listCollections failed: {
    "ok" : 0,
    "errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {} }",
    "code" : 13,
    "codeName" : "Unauthorized"
}

我在shell中输入show collections

我错过了什么?

2 个答案:

答案 0 :(得分:0)

奇怪的是,在尝试列出集合或查询之前,我必须在mongo shell中键入use test_db来选择数据库。即使我的登录脚本中有--authenticationDatabase param,mongo也不会自动为您选择提到的数据库。你必须自己做。

答案 1 :(得分:0)

--authenticationDatabase仅指定MongoDB用户需要进行身份验证的数据库才能登录。换句话说,就是创建用户的数据库。

由于您创建的用户只能访问test_db,因此在使用您创建的用户使用MongoDB登录时,您无权在其他数据库(如默认测试数据库)上运行命令。 / p>

如果您希望在登录后切换到test_db,则应该使用此命令:

  

mongo test_db -u' test_user' --authenticationDatabase' test_db' -p   '密码'