Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 显示星展银行给出的报价;“未授权执行命令”;错误_Mongodb - Fatal编程技术网

Mongodb 显示星展银行给出的报价;“未授权执行命令”;错误

Mongodb 显示星展银行给出的报价;“未授权执行命令”;错误,mongodb,Mongodb,我花了一些时间试图找出问题出在哪里,但由于我找不到,我决定在这里提问 我正在Windows 8上运行MongoDB(Windows 64位2008 R2+)版本3.2.3,路径为: C:\MongoDB\bin用于安装 C:\data\db用于数据文件夹 我已经安装了以下内容和官方文档中的内容 第一个问题可能是客户端(mongo.exe)和服务器(mongod.exe)之间的连接,因为我不知道这是否是一个问题 我通过命令行(具有管理员权限)启动了mongod.exe,一切正常,我收到了以下消息:

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

我正在Windows 8上运行MongoDB(Windows 64位2008 R2+)版本3.2.3,路径为:

C:\MongoDB\bin用于安装

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之间的连接


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

创建这样的用户:

db.createUser(
      {
        user: "myUserAdmin",
        pwd: "abc123",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
      }
    )
然后按照以下步骤进行连接:

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
检查手册:

有两件事,

1) 您可以先不使用用户名和密码运行mongodb实例

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

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

问题答案的副本:

解决方案

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

因此,我尝试使用随机端口启动服务器

[dir]mongod.exe --port 2000
然后,将壳与

[dir]mongo.exe --port 2000
这一次,服务器打印了一条消息,说有一个新的连接。
我输入了几个命令,一切都很好,我从文档中开始了基础教程,检查它是否正常,现在是。

您应该使用访问控制启动mongod实例,例如:

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

$ mongo
> use admin
> db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
现在,如果您运行命令“db.stats()”或“show users”,您将得到错误“未授权管理员执行命令…”

原因是您仍然没有将角色“read”或“readWrite”授予用户myUserAdmin。您可以按以下方式进行操作:

> db.auth("myUserAdmin", "abc123")
> db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])
现在您可以验证它(命令“show users”现在可以工作了):

现在,如果您运行“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)

还有一个,在您按照cmd-1创建用户后,请通过cmd-2为用户分配读/写/根角色。然后通过cmd“mongod--auth”重新启动mongodb

将角色分配给用户的好处是您可以通过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" }])

在我的案件中,是Docker在后台运行。如果您安装了Docker,您可能希望关闭它并重试。

对我来说,它通过添加

1) “您可以先不使用用户名和密码运行mongodb实例。--确定

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


您对当前用户的权限显然不正确。这是一个新的安装。只需在未启用授权的情况下安装fresh,并首先了解最新情况。然后仔细阅读教程(我建议使用主站点文档,而不是个人博客文章)正确设置授权。是否创建了用户?如果没有,请从配置文件中删除--auth,重新启动并重试。@genericuser因为它是一个新安装,我想我没有创建用户。对于配置文件,我没有
use admin
db.createUser({
  user: "newUsername",
  pwd: "password",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
db.grantRolesToUser('newUsername',[{ role: "root", db: "admin" }])
db.createUser({
  user: "myUserAdmin",
  pwd: "abc123",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ],
  mechanisms:[ "SCRAM-SHA-1" ] // I added this line

})