当前位置: 首页 > 知识库问答 >
问题:

显示dbs出现“未授权执行命令”错误

哈烨熠
2023-03-14

我花了一些时间试图找出什么是错误的,但由于我无法找到,我决定在这里问。

我正在运行MongoDB(Windows 64位2008 R2)3.2版。3在Windows 8上,路径为:

C:\MongoDB\bin用于安装

html" target="_blank">数据文件夹的C:\data\db

我已经从官方文档中安装了以下视频和教程。

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

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

waiting for connections on port 27017

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

另一边mongo.exe指纹

connecting to : test

我不知道在这一点上一切是否正确,但我仍然尝试了一些基本的命令,如:

show dbs返回未经管理员授权执行命令的

基本上,我尝试的所有命令都有相同的错误消息,即使是我刚刚用use'dbName'

一些在线回答说我必须创建一个具有适当角色的用户,我尝试了这个。仍然是相同的错误消息未被授权执行命令

我的问题如下:

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

其他信息:

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

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

编辑部分:

我决定在另一台多年未接触过的电脑上试用它,它运行在64位Windows7上。

我复制了这台计算机根部的MongoDB安装文件夹,创建\data\db文件夹并启动mongod.exe.

然后我启动了mongo.exe,这次,mongod.exe打印了一条信息,说有一个新的开放连接,但在我的实际电脑上没有。我认为问题就出在这里,因为我能够从官方留档开始基本教程,并执行简单的命令,如创建新数据库、插入、查找、显示数据库等。我不能在我的实际电脑上做的一切。

所以我认为问题是来自mongod之间的联系。exe和mongo。exe

您知道我如何解决这个问题吗?因为我尝试过几次卸载。


共有3个答案

戎洛城
2023-03-14

另外,在您按照cmd-1创建用户后,请通过cmd-2为用户分配读/写/根角色,然后通过cmd"mongo-auth"重启mongob。

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

cmd-1:

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

cmd-2:

db.grantRolesToUser('newUsername',[{ role: "root", db: "admin" }])
舒永嘉
2023-03-14

创建如下用户:

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/

袁良弼
2023-03-14

您应该使用权限改造启动mongos实例,即--auth命令行选项,例如:

$ mongod --auth

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

$ 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”现在可以工作了):

> 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中的任何其他数据库。

(MongoDB版本3.4.3)

 类似资料: