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

Posted

技术标签:

【中文标题】错误:无法添加用户:未在测试中授权执行命令 createUser:【英文标题】: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 :) 非常感谢! 对我来说“使用管理员”命令很有帮助,因为我一开始没有选择数据库 【参考方案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

【讨论】:

以上是关于错误:无法添加用户:未在测试中授权执行命令 createUser:的主要内容,如果未能解决你的问题,请参考以下文章

用户未在 MEAN Stack 中获得授权?

“读取”命令未在“读取行”循环中执行[重复]

Symfony PHPUnit 测试不验证用户

sys用户界面无法查看其他用户视图

Angularjs - 未在 Safari 中添加授权标头

JWT 令牌未在远程服务器上验证,无法匹配“孩子”错误