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

时间:2015-01-05 17:46:32

标签: 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"
                }
        ] }
}

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

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

但我收到了这个错误:

  

错误:无法添加用户:未在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

提前致谢。

6 个答案:

答案 0 :(得分:11)

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

然后开始没有--auth之类的 mongod --config /usr/local/etc/mongod.conf

然后更新您的角色like

  

db.updateUser(“admin”,{roles:   [ “userAdminAnyDatabase”, “userAdmin”, “读写”, “dbAdmin”, “clusterAdmin”, “readWriteAnyDatabase”, “dbAdminAnyDatabase”]});

现在再次使用--auth启动mongod并尝试。

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

但此用户不是其他数据库的一部分。所以,一旦你创建了管理员用户,

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

  

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

     

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

use APPLICATION_DB

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

db.createUser({user:"test", pwd:"test", roles:['dbOwner']})

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

答案 1 :(得分:7)

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

mongo -u admin

输入管理员用户密码

登录后,按照您提到的方式创建用户

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

答案 2 :(得分:4)

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

db.getUser("admin")      
{    
        "_id" : "admin.admin",   
        "user" : "admin",    
        "db" : "admin",    
        "roles" : [    
                {    
                        "role" : "dbAdminAnyDatabase",    
                        "db" : "admin"    
                },    
                {    
                        "role" : "clusterAdmin",    
                        "db" : "admin"    
                }    
        ] }    
}    

创建管理员用户和密码后,Mongo将不允许您像以前登录过的管理员用户那样进行任何架构更新。

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

答案 3 :(得分:0)

你应该退出当前的mongod进程并重新启动它而不使用参数--auth。

在终端类型:mongod

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

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

它应该成功完成....

答案 4 :(得分:0)

如果您遇到相同的问题并且有一个配置文件来触发mongod实例-然后继续并退出mongod的运行过程&在您的配置文件中,请确保您设置了安全性。authorization:禁用,此外如果您拥有keyFile(即cert文件的路径),然后也注释该规范,现在就可以使用该配置文件开始mongod进程-您应该可以使用admin db创建用户。

如果您处理副本集:创建完主节点和用户后,请确保启动并连接到副本集(该副本集又在内部连接到主节点),在这里您可以执行任何操作较早创建的用户,但是当您再次直接连接到主节点以执行一些命令,例如 rs.initiate()/ rs.status()/ show dbs / show users 时,您最终会出错(没有经过身份验证的用户)。

security:
  authorization: disabled
# keyFile: /opt/mongodb/keyfile

答案 5 :(得分:0)

就我而言:

1.stop mongodb:

$ service mongod stop

2。编辑此/etc/mongod.conf:

   security:

     authorization: "disabled"

3。然后我再次开始服务:

$ service mongod start

4。添加用户:

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

在第2步中添加了/etc/mongod.conf中的5.comment行

6。重启mongod

 service mongod restart