我已经使用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')"
只是给我语法错误。
我如何做到这一点?
答案 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 dbs
和show collections
。
答案 1 :(得分:6)
通过输入命令解决它
use dummydb
db.addUser('dummyuser', 'dummysecret')
到.js
文件中,然后通过调用:
$ 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'),
]) : [],
],