我在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
。
我错过了什么?
答案 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 '密码'