13

为了想在 Capistrano 任务中创建一个 MongoDB 数据库,我需要弄清楚当 MongoDB 在 auth 开启的情况下运行时如何通过 MongoDB shell 创建一个新数据库。

启用身份验证后,MongoDB shell 必须先进行身份验证才能执行任何操作,但据我所知,必须在使用管理数据库时进行身份验证。所以我一直在连接它,比如:

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 和管理员用户在 MongoDB 中创建一个数据库。

关于如何做到这一点的任何建议?

4

2 回答 2

16

您可以使用db.getSiblingDB(name)来引用新数据库并添加新帐户,例如:

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
于 2012-07-02T05:03:29.983 回答
6

请注意,该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'}]});"
于 2017-03-27T13:50:12.757 回答