【问题标题】:show dbs gives "Not Authorized to execute command" errorshow dbs 给出“未授权执行命令”错误
【发布时间】:2021-09-03 22:54:36
【问题描述】:

我花了一些时间试图找出问题所在,但由于我找不到,我决定在这里问。

我在 Windows 8 上运行 MongoDB(Windows 64-bit 2008 R2+) 版本 3.2.3,路径是:

C:\MongoDB\bin 用于安装

C:\data\db 用于数据文件夹

我已经安装了官方文档中的this videothis tutorial

第一个问题可能是客户端(mongo.exe)和服务器(mongod.exe)之间的连接,因为我真的不知道这是否是一个问题。

我通过命令行启动了 mongod.exe(具有管理员权限),一切正常,我收到了消息:

waiting for connections on port 27017

但是当我通过命令行的新实例启动 mongo.exe 时,服务器 (mongod.exe) 不会打印一条消息说有一个新的连接(在我观看的教程中就是这种情况)

在另一边,mongo.exe 打印出来

connecting to : test

我不知道此时一切是否正确,但我仍然尝试了一些基本命令,例如:

show dbs 返回not authorized on admin to execute command

基本上,我尝试的所有命令都有相同的错误消息,即使是我刚刚使用use 'dbName' 创建的“新鲜”数据库

网上的一些答案说我必须创建一个具有适当角色的用户,我试过this one。 还是一样的错误信息not authorized to execute command

我的问题如下:

当我启动 mongo.exe 时 mongod.exe 不显示新连接是否正常?如果它是正确的,那么我该怎么做才能使基本命令正常工作?

附加信息:

我尝试卸载/重新安装几次,使用 Windows 安装程序中的“自定义模式”和“完整模式”,但总是导致同样的问题。

我还尝试按照官方文档创建 MongoDB 服务,但我不确定这是否是个好主意。 (我无法添加更多链接,但它在我分享的第二个链接的一个部分中。

编辑部分:

我决定在我多年未接触过的另一台运行 Windows 7 64 位的计算机上尝试一下。

我复制了这台电脑根目录下的MongoDB安装文件夹,创建了\data\db文件夹并启动了mongod.exe。

然后我启动了 mongo.exe,这一次,mongod.exe 打印了一条消息,说有一个新的打开连接,它不在我的实际计算机上。我认为问题出在这里,因为我能够从官方文档开始基本教程并执行简单的命令,如创建新数据库、插入、查找、显示数据库等。我在实际计算机上无法完成的所有操作.

所以我认为问题来自于 mongod.exe 和 mongo.exe 之间的连接

您知道如何解决这个问题,因为我已经尝试卸载了几次。

【问题讨论】:

  • 您对当前用户的权限显然不正确。这是一个新的安装。只需在未启用授权的情况下安装新的,然后先掌握事情的窍门。然后仔细按照教程(我会推荐主站点文档而不是人们的博客文章)正确设置授权。
  • 您创建了用户吗?如果没有,请从您的配置文件中删除 --auth,重新启动并重试。
  • @genericuser 因为它是全新安装,我认为我没有创建用户。对于配置文件,我没有,因为我使用了 .msi,显然如果需要,您必须手动创建一个。
  • @BlakesSeven 所以我尝试按照官方文档 (docs.mongodb.org/v3.2/tutorial/install-mongodb-on-windows) 重新安装 MongoDB,但我仍然面临同样的问题。是否可能与 mongod.exe 和 mongo.exe 之间的连接有关?谢谢
  • 如果您使用的是 MongoDB Compass,请查看my solution here

标签: mongodb


【解决方案1】:

你应该已经启动了带有访问控制的mongod实例,即the --auth command line option,如:

$ mongod --auth

让我们启动 mongo shell,并在 admin 数据库中创建一个管理员:

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

现在如果您运行命令“db.stats()”或“显示用户”,您将收到错误“管理员未授权执行命令...”

> db.stats()
{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined }",
        "code" : 13,
        "codeName" : "Unauthorized"
}

原因是您仍未将角色“read”或“readWrite”授予用户 myUserAdmin。你可以这样做:

> db.auth("myUserAdmin", "abc123")
> db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])

现在您可以验证它(命令“显示用户”现在可以使用):

> show users
{
        "_id" : "admin.myUserAdmin",
        "user" : "myUserAdmin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "read",
                        "db" : "admin"
                },
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}

现在如果你运行“db.stats()”,你也会没事的:

> db.stats()
{
        "db" : "admin",
        "collections" : 2,
        "views" : 0,
        "objects" : 3,
        "avgObjSize" : 151,
        "dataSize" : 453,
        "storageSize" : 65536,
        "numExtents" : 0,
        "indexes" : 3,
        "indexSize" : 81920,
        "ok" : 1
}

这种用户和角色机制也可以应用于 MongoDB 中的任何其他数据库,除了 admin 数据库。

(MongoDB 版本 3.4.3)

【讨论】:

  • 这给了我 [js] 错误:找不到用户 myUserAdmin@test
  • @StepanYakovenko,我刚刚尝试了 4.0.9 版,配方仍然可以正常工作。想知道您在哪一步遇到了您提到的错误?
  • 不幸的是我不得不删除整个数据库来重做这个,所以我现在不能真正重现这个:(
  • @StepanYakovenko 您可能遇到该错误的原因是您忘记运行use admin 命令,因为我遇到了同样的错误,并且在检查后我忘记在连接后运行该命令。
【解决方案2】:

像这样创建一个用户:

db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )

然后按照以下方式连接:

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

查看手册:

https://docs.mongodb.org/manual/tutorial/enable-authentication/

【讨论】:

  • 如果我理解正确,MongoDB 在为 admin 数据库创建第一个用户时会提供异常。因此,在全新安装后,我启动了 mongod.exe,然后启动了 mongo.exe,我使用“使用管理员”切换到了 admin 数据库,并尝试使用您提供的代码创建用户。但是,我仍然有错误消息说:管理员未授权执行命令。我的客户端是否可能未连接到服务器?当我使用 Ctrl+C 关闭 mongod.exe 时,我仍然能够在 mongo.exe 上键入命令。它不应该说“断开连接”之类的东西吗?谢谢
  • 显然应该说未连接。如果不运行 mongod,您应该无法运行 mongo。
  • 是的,连接存在问题,因为即使关闭了 mongod/mongo shell,进程也在侦听默认端口。我将默认端口更改为一个免费端口,现在一切正常。感谢您的帮助
  • 请在答案上打勾。不客气。 @安茹
  • 如果您认为它对您有用,请接受正确的答案,这可能是这个社区的礼貌。
【解决方案3】:

另外,通过cmd-1创建用户后,请通过cmd-2为用户分配读/写/root角色。然后通过 cmd "mongod --auth" 重启 mongodb。

给用户分配角色的好处是你可以通过mongo shell或者python/java等进行读/写操作,否则你会遇到“pymongo.errors.OperationFailure: not authorized”当你尝试读/写你的数据库。

cmd-1:

use admin
db.createUser({
  user: "newUsername",
  pwd: "password",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})

cmd-2:

db.grantRolesToUser('newUsername',[{ role: "root", db: "admin" }])

【讨论】:

  • 谢谢 - 这个答案确实解决了我的问题 - 执行 3.4.10 社区版。简单地添加读取角色并不能解决授权问题。对于其他人:我建议阅读以下page 以了解为什么需要进行此更改。
【解决方案4】:

有问题的答案 OP 副本:

解决方案

在上一次编辑的更新之后,我查看了一下客户端和服务器之间的连接,我发现即使 mongod.exe 没有运行,仍然有 something 在监听端口27017 与netstat -a

所以我尝试使用随机端口启动服务器

[dir]mongod.exe --port 2000

然后是外壳

[dir]mongo.exe --port 2000

这一次,服务器打印了一条消息,说有一个新的连接。 我输入了几个命令,一切正常,我从文档开始了基本教程,检查它是否正常,现在它是正常的。

【讨论】:

  • 感谢在这方面花费了太多时间。在 Windows 10 消息队列上似乎启用了使用端口 27017 的 mqsvc.exe。
【解决方案5】:

有两件事,

1)你可以先运行mongodb实例,无需用户名和密码。

2) 然后您可以使用下面的查询将用户添加到默认的 mongodb 系统数据库中。

db.createUser({
  user: "myUserAdmin",
  pwd: "abc123",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})

谢谢。

【讨论】:

    【解决方案6】:

    试试这个...

    use admin;
    db.createUser({
       user: 'admin',
       pwd: 'SecurePass',
       roles: [ { role: 'root', db: 'admin' } ]
    });
    db.auth("admin", "SecurePass");
    db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])
    

    db.grantRolesToUser() 之前的 db.auth()

    解决我的问题:)

    如果不起作用,请尝试将角色更改为“readWrite”

    【讨论】:

      【解决方案7】:

      在我的例子中,Docker 在后台运行。如果您安装了 Docker,您可能需要关闭它并重试。

      【讨论】:

        【解决方案8】:

        对我来说,它通过添加来工作

        1) "你可以先不用用户名和密码运行mongodb实例。---OK

        2) "然后你可以使用下面的查询将用户添加到默认的 mongodb 系统数据库中".---OK

        db.createUser({
          user: "myUserAdmin",
          pwd: "abc123",
          roles: [ { role: "userAdminAnyDatabase", db: "admin" } ],
          mechanisms:[ "SCRAM-SHA-1" ] // I added this line
        
        })
        

        【讨论】:

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