【发布时间】:2019-05-31 14:24:54
【问题描述】:
这里是蒙古新手。我有一个带有四个数据库的 mongo 安装,并且想创建一个可以读取和写入所有数据库的用户。我试过了:
use admin;
db.addUser({user: "foo" , pwd: "bar", roles: [ "readWriteAnyDatabase" ]})
但是当我尝试这样做时
mongo someotherdb -u foo -p
并使用正确的密码进行身份验证,它会给我一个身份验证错误。
我也尝试通过这样做手动将用户添加到其他数据库
use someotherdb
db.addUser({user: "foo", roles: ['readWrite'], userSource: "admin"});
仍然没有骰子尝试通过 mongo shell 或在目标数据库中使用 auth 命令登录。
我做错了吗?您如何让一个可以全局读取和写入任何数据库的用户?您是否必须将所述用户添加到每个数据库的 system.users 集合中,或者如果他们具有“readWriteAnyDatabase”角色则不需要?
我在 ubuntu 上使用 mongo 2.4。
【问题讨论】:
-
命令use admin有错别字。您确定用户创建了吗?检查:使用管理员; db.system.users.find()。确保创建用户后,您可以使用 mongo localhost:port/admin -u foo -p bar 登录。 (unf。您只能使用在那里创建的用户对 admin db 进行身份验证)
-
糟糕,用户已成功创建,可以登录管理数据库了。
-
那么,readWriteAnyDatabase 角色本身就不允许我连接到 mongo 实例中的其他数据库吗?
-
不是那个意思。这意味着您必须进行身份验证,但在您能够连接之后。 (我的理解是,在这种情况下,您对能够访问其他数据库的会话进行身份验证只需要在管理员数据库上进行身份验证)
-
曾经解决过这个问题吗?我遇到了同样的问题。我设置了 readWriteAnyDatabase,可以在 mongo shell 中切换数据库但不能在 mongo 驱动中切换(出现 auth failed 错误),或者直接连接到 shell 中除 admin 以外的任何数据库。