从命令行创建MongoDB用户

Gol*_*den 13 mongodb

我已经建立了一个MongoDB数据库,其admin用户只具有管理权限,而不具有对数据库的读写权限.

我现在想做的是:

  • 添加新数据库,
  • 并向该数据库添加新用户.

并且:我需要从命令行执行此操作.所以我尝试过:

$ mongo admin -u admin -p admin --eval "db.addUser('dummyuser', 'dummysecret')"
Run Code Online (Sandbox Code Playgroud)

(请注意,由于我仍在运行MongoDB 2.0,我使用的是旧格式db.addUser.)

如果我还能告诉它该用户应该使用哪个数据库,这将是非常有意义的.但现在我在挣扎.如何为此命令指定数据库?如果我在交互式shell中,我可以运行

> use dummydb
Run Code Online (Sandbox Code Playgroud)

但是如何从命令行执行此操作?我的第一次尝试是将两个命令连接起来;,但这不起作用:

$ mongo admin -u admin -p admin --eval "use dummydb;db.addUser('dummyuser', 'dummysecret')"
Run Code Online (Sandbox Code Playgroud)

只是给我语法错误.

我怎么做到这一点?

Ste*_*nie 22

use db语法仅在交互式shell会话支持.

如果要从管理脚本更改数据库,可以使用db.getSiblingDB('dbname').

所以你使用的等效命令行将--eval是:

# MongoDB 2.6+: use createUser()
$ mongo admin -u admin -p admin --eval "db.getSiblingDB('dummydb').createUser({user: 'dummyuser', pwd: 'dummysecret', roles: ['readWrite']})"

# MongoDB 2.4: use addUser()
$ mongo admin -u admin -p admin --eval "db.getSiblingDB('dummydb').addUser('dummyuser', 'dummysecret')"
Run Code Online (Sandbox Code Playgroud)

MongoDB手册中有一节介绍了交互式和脚本式之间的差异mongo.这包括其他交互式shell帮助程序的等价物,例如show dbsshow collections.


Gol*_*den 6

通过放置命令解决它

use dummydb
db.addUser('dummyuser', 'dummysecret')
Run Code Online (Sandbox Code Playgroud)

到一个.js文件,然后通过调用运行MongoDB:

$ mongo admin -u admin -p admin < setupMongoDB.js
Run Code Online (Sandbox Code Playgroud)

而已 :-)