添加管理员用户并使用ansible启用身份验证后,我无法登录mongodb
我想保护我的mongo db,我正试图用ansible和stackoverflow来解决这个问题: 我正在使用mongo v4.0.9。这是我剧本的相关部分:添加管理员用户并使用ansible启用身份验证后,我无法登录mongodb,mongodb,ansible,Mongodb,Ansible,我想保护我的mongo db,我正试图用ansible和stackoverflow来解决这个问题: 我正在使用mongo v4.0.9。这是我剧本的相关部分: - name: Add mongo admin user mongodb_user: database: admin name: creds['mongo_admin_stg']['user'] password: creds['mongo_admin_stg']['pass'] state: pres
- name: Add mongo admin user
mongodb_user:
database: admin
name: creds['mongo_admin_stg']['user']
password: creds['mongo_admin_stg']['pass']
state: present
roles: root
creds:
mongo_admin_stg:
user: admin
password: ThePasW0ord
mongo_admin_prod:
user: god
password: S3cr3tHeaven
#...#
当我运行我的剧本时,没有错误。然后我加上几行
security:
authorization: enabled
。。。到我的/etc/mongod.conf
我在CentOS7服务器上运行mongod,因此我重新启动mongo服务,如下所示:
systemctl restart mongod.service
然后我尝试得到一个mongo shell,如下所示:
mongo tool-001:27017 -uadmin -pThePasW0ord --authenticationDatabase "admin"
但我得到了这个错误信息:
2019-05-13T20:54:31.864+0000 E QUERY [js] Error: Authentication failed. :
更新:如果我在运行playbook之后,在重新启动mongod服务之前打开MongoShell,我会发现admin
数据库中没有集合:
> use admin
switched to db admin
> show collections
>
我错过了什么
更新:根据Zeitounator的回答。我决定对用户名和密码进行硬编码,看看是否会创建admin
用户。所以我把我的剧本改成:
- name: Add mongo admin user
mongodb_user:
database: "admin"
# name: "{{ creds['mongo_admin_stg']['user'] }}"
# password: "{{ creds['mongo_admin_stg']['pass'] }}"
# name: "{{ creds.mongo_admin_stg.user }}"
# password: "{{ creds.mongo_admin_stg.pass }}"
name: admin
password: password
state: present
roles: root
我运行我的playbook,它没有错误地完成了,但是如果我在更新我的
/etc/mongod.conf
之前打开mongo shell,在重新启动mongod
服务器之前,我仍然在admin
数据库中看不到任何集合。根据您的问题,我猜您之前在playbook中声明了一个变量:
- name: Add mongo admin user
mongodb_user:
database: admin
name: creds['mongo_admin_stg']['user']
password: creds['mongo_admin_stg']['pass']
state: present
roles: root
creds:
mongo_admin_stg:
user: admin
password: ThePasW0ord
mongo_admin_prod:
user: god
password: S3cr3tHeaven
#...#
(侧注:如果这是你所做的,请查看并考虑加密敏感数据)
您只是遇到了一个问题(即,您没有使用它):您实际上是在声明要使用的变量的名称(作为基本标量),而不是用它的值替换它 这是正确的语法:- name: Add mongo admin user
mongodb_user:
database: admin
name: "{{ creds['mongo_admin_stg']['user'] }}"
password: "{{ creds['mongo_admin_stg']['pass'] }}"
state: present
roles: root
请注意,您可以使用点表示法,在这种情况下,点表示法相当于一种可能更可读的表示法
name: "{{ creds.mongo_admin_stg.user }}"
password: "{{ creds.mongo_admin_stg.pass }}"
编辑:上面的内容是固定的,肯定是一个拦截器,但您仍然被卡住了。我的蒙哥知识是零。不过,以下是我所做的和成功的
show users
命令可用。这将返回新创建的用户我刚刚在一个新创建的容器上再次尝试,但用户不在那里。所以我确信ansible任务正在创建它。谢谢你的回答,但是
admin
用户仍然没有被创建。请查看我的更新。我能够在docker容器上成功完成您的步骤。。。编辑来了。(注意:如果你用我的mongo知识除以任何数字,你会得到一个运行时错误:))啊show users
出于某种原因,我以为会在admin
数据库中创建集合。现在我有一帮奇怪的管理员用户,我必须清理:)