如何在启用auth的情况下从命令行创建新的MongoDB?
为了在Capistrano任务中创建MongoDB数据库,我需要弄清楚当MongoDB在启用auth的情况下运行时如何通过MongoDB shell创建新数据库 启用auth后,MongoDB shell在没有先进行身份验证的情况下无法执行任何操作,但据我所知,身份验证必须在使用admin数据库时进行。因此,我已经开始连接到它,比如:如何在启用auth的情况下从命令行创建新的MongoDB?,mongodb,capistrano,Mongodb,Capistrano,为了在Capistrano任务中创建MongoDB数据库,我需要弄清楚当MongoDB在启用auth的情况下运行时如何通过MongoDB shell创建新数据库 启用auth后,MongoDB shell在没有先进行身份验证的情况下无法执行任何操作,但据我所知,身份验证必须在使用admin数据库时进行。因此,我已经开始连接到它,比如: sudo -u mongodb mongo admin --eval "db.auth(username, password)" 这验证了我的进一步操作,但是…
sudo -u mongodb mongo admin --eval "db.auth(username, password)"
这验证了我的进一步操作,但是…此时我需要创建数据库,并在同一shell会话中为其创建一个用户。然而,我不能:
sudo -u mongodb mongo admin --eval "db.auth(username, password);use new_database"
因为use database
不能在eval中使用。所以我试过:
sudo -u mongodb mongo admin --eval "db.auth(username, password);db = connect('localhost:27017/new_database')"
这实际上会为我创建一个新数据库的实例,但如果我尝试:
sudo -u mongodb mongo admin --eval "db.auth(username, password);connect('localhost:27017/new_database').addUser(new_user, new_password)"
我得到了一个身份验证错误,因此使用connect()
命令显然会忘记我以前已经过身份验证
这就是我遇到的问题,我试图使用auth和admin用户在一行中创建一个数据库
有什么建议吗?您可以使用它来引用新数据库并添加新帐户,例如:
mongo -u username -p password admin --eval "db.getSiblingDB('new_database').addUser('new_user', 'new_password');"
现在,您应该能够使用-u和-p从命令行进行身份验证:
mongo -u new_user -p new_password new_database
请注意,自2.6版以来,
addUser
函数已被弃用
使用db.createUser()
和db.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'}]});"
@谢谢,更正了文档链接(来自旧的wiki链接)。