错误:无法添加用户:未在测试时授权执行命令{createUser:

brb*_*brb 20 mongodb

我从MongoDB开始,我想用户/传递访问dbs.我做的第一件事是创建和管理用户并使用auth activate启动mongodb,这是我创建的用户:

db.getUser("admin") 
{
        "_id" : "admin.admin",
        "user" : "admin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "dbAdminAnyDatabase",
                        "db" : "admin"
                },
                {
                        "role" : "clusterAdmin",
                        "db" : "admin"
                }
        ] }
}
Run Code Online (Sandbox Code Playgroud)

之后,我尝试使用以下命令创建用户:

use newdb
db.createUser(
  {
    user: "newuser",
    pwd: "12345678",
    roles: [ { role: "readWrite", db: "newdb" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误:

错误:无法添加用户:未在newdb上授权执行命令{createUser:"newuser",pwd:"xxx",roles:[{role:"readWrite",db:"newdb"}],digestPassword:false, writeConcern:{w:"most",wtimeout:30000.0}}在src/mongo/shell/db.js:1004

我用谷歌搜索了它,但只有两个结果,一个在中文,另一个没有相关,所以我有点迷路.任何的想法 ?看起来我的管理员用户没有权限,我使用以下命令访问mongodb:

$mongo --port 27017 -u adminUser -p adminPass  --authenticationDatabase admin
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Kan*_*mar 16

停止正在运行的mongod实例 mongod --config /usr/local/etc/mongod.conf --auth

然后开始没有--auth喜欢 mongod --config /usr/local/etc/mongod.conf

然后更新您的角色

db.updateUser("admin",{roles:["userAdminAnyDatabase","userAdmin","readWrite","dbAdmin","clusterAdmin","readWriteAnyDatabase","dbAdminAnyDatabase"]});

现在再次启动mongod --auth并尝试.


我们的想法是你必须使用上面提到的所有ROLES在"admin"数据库下创建用户.

但是这个用户不是其他数据库的一部分.所以一旦你创建了admin用户,

然后以该管理员用户身份登录,

SERVER:mongod --config /usr/local/etc/mongod.conf --auth

客户:./ mongodb/bin/mongo localhost:27017/admin -u adminUser -p 123456

use APPLICATION_DB
Run Code Online (Sandbox Code Playgroud)

再次为此APPLICATION_DB创建一个新用户(比如说APP_USER).对于此应用程序用户,您只需要"dbOwner"角色.

db.createUser({user:"test", pwd:"test", roles:['dbOwner']})
Run Code Online (Sandbox Code Playgroud)

现在您的应用程序必须使用此APP_USER和APP_DB.


Bal*_*ala 14

我解决了同样的问题,只是退出并以管理员身份登录

mongo -u admin
Run Code Online (Sandbox Code Playgroud)

输入您的管理员用户密码

登录后,像往常一样创建一个用户

use newdb
db.createUser(
  {
    user: "newuser",
    pwd: "12345678",
    roles: [ { role: "readWrite", db: "newdb" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

  • 我如何知道我的管理员用户和密码? (2认同)

gha*_*eri 8

就我而言:

1.停止mongodb:

$ service mongod stop
Run Code Online (Sandbox Code Playgroud)

2.编辑/etc/mongod.conf:

   security:

     authorization: "disabled"
Run Code Online (Sandbox Code Playgroud)

3.然后我再次启动服务:

$ service mongod start
Run Code Online (Sandbox Code Playgroud)

4.添加用户:

 $ mongo mongodb://localhost:27017
use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

5.在步骤 2 中添加 /etc/mongod.conf 中的注释行

6.重启mongod

 service mongod restart
Run Code Online (Sandbox Code Playgroud)


小智 5

下面的命令说,您已经创建了管理员用户和密码。

db.getUser("admin")      
{    
        "_id" : "admin.admin",   
        "user" : "admin",    
        "db" : "admin",    
        "roles" : [    
                {    
                        "role" : "dbAdminAnyDatabase",    
                        "db" : "admin"    
                },    
                {    
                        "role" : "clusterAdmin",    
                        "db" : "admin"    
                }    
        ] }    
}    
Run Code Online (Sandbox Code Playgroud)

一旦创建了管理员用户和密码,Mongo将不允许您像以前一样使用管理员身份进行任何模式更新。

使用新创建的管理员用户和密码来创建新用户或进行任何更新。它应该工作。


小智 5

您应该退出当前的 mongod 进程并在没有参数的情况下重新启动它--auth

在终端类型上: mongod

mongod 进程启动后,您可以打开新的终端选项卡来运行 mongo shell 命令:

mongo --shell
use new_your_database
db.createUser(
   {
     user: "mongo_admin",
     pwd: "mongo_admin",
     roles: [ "readWrite", "dbAdmin" ]
   }
)
Run Code Online (Sandbox Code Playgroud)

它应该成功完成......