我有一个在ubuntu上运行mongodb 2.6的测试服务器.我的macbook上运行的是同一个版本.在这两台机器中,我都使用标准升级机制从mongodb 2.4升级.现在我需要设置基于用户名和密码的身份验证

在我的mac电脑上,我使用brew update将mongodb更新为2.6.我

我在Mac上try 了以下命令

$mongo
>db.getSiblingDatabase('admin')
>db.createUser({user:"root", pwd:"mycomplexpassword", roles:[ "userAdminAnyDatabase", "readWrite" ] } )

我犯了以下错误

Error: couldn't add user: User and role management commands require auth data to have schema version 3 but found 1 at src/mongo/shell/db.js:1004

因此,我无法启用mongodb的身份验证.如何解决这个问题?谷歌搜索错误现在似乎没有返回任何有用的信息.

PS:当我在我的服务器上向mongodb添加身份验证时,是否也会出现同样的问题?

推荐答案

mongodb 2.4和2.6中的db.system.users模式不同,导致无法创建新用户.

2.4模式

db.system.users.find()
{
    "_id" : ObjectId("53675bc48ff842a0657e25ff"),
    "user" : "root",
    "pwd" : "c2ff9601c8590812f0d40b9f60869679",
    "roles" : [
        "userAdminAnyDatabase",
        "readWrite"
    ]
}

2.6模式

db.system.users.find()
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "credentials" : {
        "MONGODB-CR" : "c2ff9601c8590812f0d40b9f60869679"
    },
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "readWrite",
            "db" : "admin"
        }
    ]
}

我没有找到一个正式的方法来改变他们.

可以使用以下命令升级.

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });

参考资料:

  1. Upgrade User Authorization Data to 2.6 Format
  2. Sobolev Eugene's answer

Mongodb相关问答推荐

在MogoDB中按时间间隔分组、统计文档和获取间隔时间

在MongoDB中获取所有帖子时如何获取相关用户信息

MongoDB 对特定搜索查询的响应时间较长

尽管前一阶段输出文档,$group stage 仍返回零文档

mongoDB文档数组字段中的唯一项如何

MongoDb $filter,然后获取非重复计数

如何使用指南针连接到 mongodb replicaset (k8s)

替换 MongoDB 中数组中的嵌入文档

如何在 Mongo 聚合管道中获取限制之前的计数

.insertOne 不是函数

指定字段对于 MongoDB 是transient瞬态的,但对于 RestController 不是

Golang/mgo:如何让 MongoDB 在字段中使用当前时间?

django 和 mongodb 是否使迁移成为过go ?

在 Nodejs 中配置最大旧空间大小

使用 MongoDB Java 驱动程序将 DBObject 转换为 POJO

使用已排序的数据获取不同的值

MongoDB服务器仍然可以在没有凭据的情况下访问

如何使用 mongoose 连接到 mongoDB Atlas

Pymongo/bson:将 python.cursor.Cursor 对象转换为可序列化/JSON 对象

Mongodb Compass 无法在 Ubuntu 18.10 中打开