ansible模块mongodb_user生成"未授权插入dname.system.users"

时间:2016-01-14 16:38:52

标签: mongodb ansible

我尝试使用" mongodb_user"通过ansible将用户添加到mongodb数据库模块。

我正在使用的确切配置(当然切换出的实际用户名和密码)是:

- name: set up mongodb credentials
  mongodb_user: name=new_db_user password=user_pwd database=mydb roles='readWrite' state=present login_user=admin login_password=admin_pwd login_database=admin

我得到的结果(使用-vvvv)是这样的(输出格式为可读性):

fatal: [some.host.net]: FAILED! => {
"changed": false,
  "failed": true,
  "invocation": {
    "module_args": {
      "database": "mydb",
      "login_database": "admin",
      "login_host": "localhost",
      "login_password": "admin_pwd",
      "login_port": "27017",
      "login_user": "admin",
      "name": "new_db_user",
      "password": "user_pwd",
      "replica_set": null,
      "roles": [
        "readWrite"
      ],
      "ssl": false,
      "state": "present",
      "update_password": "always"
    },
    "module_name": "mongodb_user"
  },
  "msg": "not authorized for insert on mydb.system.users"
}

虽然这看起来像一个简单的权限问题,但遗憾的是它似乎并不存在。我使用的管理员用户具有root角色,并且通过远程计算机上的命令行直接执行完全相同的操作(使用完全相同的凭据)可以毫无问题地添加用户:

[root@somehost etc]# mongo admin -u admin -p
MongoDB shell version: 2.6.9
Enter password: 
connecting to: admin
> use mydb
switched to db mydb
> db.createUser({user: 'new_db_user', pwd: 'user_pwd', roles: ['readWrite']})
Successfully added user: { "user" : "new_db_user", "roles" : [ "readWrite" ] }

我已经检查过,双重检查并三重检查了所有用户名和密码,他们肯定是正确的。更改数据库或用户名也会产生相同的错误。

编辑:此外,我尝试将管理员用户的角色设置为" userAdminAnyDatabase"以及" userAdmin"并将其与各种其他管理角色相结合,但每次结果都完全相同。感谢Raul Hugo指出这一点。

我使用的是ansible 2.0(与ansible 1.9相同的错误),mongodb版本在RHEL 7.1上运行2.6.9。

1 个答案:

答案 0 :(得分:1)

我一直试图重现这个问题而没有成功。

ansible -i hosts mongo --user vagrant -k -m  name=new_db_user -m mongodb_user -a "name=new_db_user password=user_pwd database=mydb roles='readWrite' state=present login_user=admin1 login_password=admin_pwd1 login_database=admin"
SSH password:
local | SUCCESS => {
    "changed": true,
    "user": "new_db_user"
}

但问题是MongoDB上的auth算法的版本,最后一个pymongo库使用 SCRAM-SHA算法,而MongoDB 2.6使用 MONGO-CR 默认情况下。这就是问题的原因。

您可以升级Mongodb版本或在2.6上更改您的身份验证算法。您可以在此处找到有关此流程的信息https://docs.mongodb.org/manual/release-notes/3.0-scram/