如何在启用auth的情况下从命令行创建新的MongoDB?

11 capistrano mongodb

为了在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)


Pra*_*yal 5

请注意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)