从命令行创建MongoDB用户

时间:2014-03-27 09:12:47

标签: mongodb

我已经使用admin用户设置了MongoDB数据库,该用户只具有管理权限,而不具有对数据库的读写权限。

我现在想做的是:

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

而且:我需要从命令行执行此操作。所以我试过了:

$ mongo admin -u admin -p admin --eval "db.addUser('dummyuser', 'dummysecret')"

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

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

> use dummydb

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

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

只是给我语法错误。

我如何做到这一点?

3 个答案:

答案 0 :(得分:20)

use db语法仅在交互式shell会话中受支持。

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

因此,使用--eval的等效命令行将是:

$ mongo admin -u admin -p admin --eval "db.getSiblingDB('dummydb').addUser('dummyuser', 'dummysecret')"

MongoDB手册中有一节涵盖Differences between interactive and scripted mongo。这包括其他交互式shell帮助程序的等效项,例如show dbsshow collections

答案 1 :(得分:6)

通过输入命令解决它

use dummydb
db.addUser('dummyuser', 'dummysecret')

.js文件中,然后通过调用:

运行MongoDB
$ mongo admin -u admin -p admin < setupMongoDB.js

它是: - )

答案 2 :(得分:0)

在我的情况下,此方法无效

    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', 'mysql'),
       // 'port' => env('DB_PORT', '8080'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', 'mysql'),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],