【问题标题】:Error: couldn't add user: not authorized on test to execute command { createUser:错误:无法添加用户:未在测试中授权执行命令 { createUser:
【发布时间】:2015-03-03 07:28:03
【问题描述】:

我从 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”,密码:“xxx”,角色:[{角色:“readWrite”,db: “newdb”}],digestPassword:假,writeConcern:{ w:“多数”, wtimeout: 30000.0 } } 在 src/mongo/shell/db.js:1004

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

$mongo --port 27017 -u adminUser -p adminPass  --authenticationDatabase admin

提前致谢。

【问题讨论】:

  • 您没有在管理员用户中包含userAdmin/userAdminAnyDatabase 角色。 dbAdminAnyDatabaseclusterAdmin 不包括用户管理权限。
  • 这就是问题所在。嗯,那是我第一次接触 mongodb :) 非常感谢!
  • 对我来说“使用管理员”命令很有帮助,因为我一开始没有选择数据库

标签: mongodb


【解决方案1】:

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

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

然后更新你的角色like

db.updateUser("admin",{roles : ["userAdminAnyDatabase","userAdmin","re​​adWrite","dbAdmin","clusterAdmin","re​​adWriteAnyDatabase","dbAdminAnyDatabase"]});

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


这个想法是你必须在“admin”数据库下创建具有上述所有角色的用户。

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

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

服务器: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。

【讨论】:

  • 谢谢,效果很好。我很确定你不需要';'在 db.updateUser 的末尾。
【解决方案2】:

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

mongo -u admin

输入您的管理员用户密码

登录后,照常创建用户

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

【讨论】:

  • 我如何知道我的管理员用户和密码?
  • 对于 bitnami mongodb,用户必须到 ec2 实例的系统日志中找到用户和密码,如下所述:docs.bitnami.com/aws/faq/get-started/find-credentials
  • @MithunSarkerShuvro 在提到的问题中,首先创建了管理员帐户。
【解决方案3】:

你应该退出当前的mongod进程并再次重新启动它,不带参数--auth

终端类型:mongod

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

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

应该成功了....

【讨论】:

  • 在 mongo db 上定义角色的正确方法是:"roles" : [ { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" } ]
【解决方案4】:

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

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

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

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

【讨论】:

  • 也就是说一旦创建就不会被删除?
【解决方案5】:

就我而言:

1.停止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

【讨论】:

    【解决方案6】:

    如果您在这里遇到同样的问题并且有一个配置文件来触发 mongod 实例,那么请继续并退出 mongod 的运行过程,并在您的配置文件中确保您设置了 security.authorization : disabled,此外如果您有 keyFile(即;证书文件的路径),那么也注释该规范,现在使用该配置文件启动您的 mongod 进程 - 您应该能够使用 admin db 创建用户。

    如果您在副本集上工作:一旦您完成创建主节点 + 用户,请确保您启动并连接到副本集(再次在内部连接到主节点),在这里您可以做任何事情较早创建的用户,但是当您再次直接连接到主节点以执行诸如 rs.initiate()/rs.status()/show dbs/show users 之类的一些命令时,最终会出现错误喜欢(没有经过身份验证的用户)。

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

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 2021-09-07
      相关资源
      最近更新 更多