为了在Capistrano任务中创建MongoDB数据库,我需要弄清楚当MongoDB在auth打开的情况下运行时如何通过MongoDB shell创建一个新数据库.
启用auth后,如果没有首先进行身份验证,MongoDB shell就无法执行任何操作,但据我所知,在使用admin数据库时必须进行身份验证.所以我一直在为它的初学者连接它:
sudo -u mongodb mongo admin --eval "db.auth(username, password)"
Run Code Online (Sandbox Code Playgroud)
这会对我进行进一步的操作进行身份验证,但是......在那一点上,我需要在同一个shell会话中创建数据库和用户.但我不能:
sudo -u mongodb mongo admin --eval "db.auth(username, password);use new_database"
Run Code Online (Sandbox Code Playgroud)
因为use database不能在eval中使用.所以我试过了:
sudo -u mongodb mongo admin --eval "db.auth(username, password);db = connect('localhost:27017/new_database')"
Run Code Online (Sandbox Code Playgroud)
这实际上会让我得到一个我想创建的新数据库的实例,但如果我尝试:
sudo -u mongodb mongo admin --eval "db.auth(username, password);connect('localhost:27017/new_database').addUser(new_user, new_password)"
Run Code Online (Sandbox Code Playgroud)
我收到一个身份验证错误,因此显然使用该connect()命令会忘记我之前已经过身份验证.
所以这就是我被困住的地方,尝试使用auth和admin用户在MongoDB的一行中创建一个数据库.
有关如何做到这一点的任何建议?
Ste*_*nie 14
您可以使用db.getSiblingDB(name)来引用新数据库并添加新帐户,例如:
mongo -u username -p password admin --eval "db.getSiblingDB('new_database').addUser('new_user', 'new_password');"
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够使用-u和-p从命令行进行身份验证:
mongo -u new_user -p new_password new_database
Run Code Online (Sandbox Code Playgroud)
请注意addUser函数自 2.6 版以来已弃用的事实。
使用db.createUser()anddb.updateUser()而不是db.addUser()将用户添加到 MongoDB。
您的代码应如下所示:
mongo -u username -p password admin --eval "db.getSiblingDB('new_database').createUser({ user : 'new_user', pwd : 'new_password', roles : [{ role: 'readWrite', db: 'new_database'}]});"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8244 次 |
| 最近记录: |