【问题标题】:Mongo user privilege to read and write to any databaseMongo 用户读写任何数据库的权限
【发布时间】: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 以外的任何数据库。

标签: mongodb authentication


【解决方案1】:

所以,我终于想通了。请注意,此修复仅适用于 Mongo 2.4。

在 2.4 中,您可以在连接字符串或命令行中指定一个数据库来验证自己的身份

所以要创建初始用户

use admin
db.createUser({user: "foo" , pwd: "bar", roles: [  "userAdminAnyDatabase","readWriteAnyDatabase" ]})

并验证使用

mongo -u foo --authenticationDatabase admin -p

现在你应该可以对任何数据库做任何你想做的事情了

【讨论】:

  • 有什么方法可以跳过“--authenticationDatabase”选项?如何将它与 php MongoClient 类一起使用? Robomongo 图形用户界面? MongoVUE 图形用户界面?
  • 如果您没有使用authenticationDatabase 选项,那么您需要连接到admin 数据库并使用db.auth(...) 进行身份验证。
  • 如果我想授予特定数据库的读写权限怎么办?
  • @LukasLiesis 我对此很陌生,但您似乎可以通过将身份验证数据库作为第一个参数传递来隐式使用该选项。不确定您是否正在寻找或完全消除数据库的名称。 mongo admin -u 'USERNAME' -p
猜你喜欢
  • 2016-03-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 2011-06-07
  • 1970-01-01
  • 2019-02-25
  • 2017-04-11
相关资源
最近更新 更多