如何为mongodb 2.6添加身份验证?

Ran*_*dra 20 mongodb

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

在我的Mac上,我使用brew更新将mongodb更新为2.6.一世

我在Mac上尝试了以下命令

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

我收到以下错误

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
Run Code Online (Sandbox Code Playgroud)

因此我无法启用auth到mongodb.如何解决这个问题?谷歌搜索错误似乎没有返回任何有用的东西.

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

stu*_*udy 30

的模式db.system.users在MongoDB中2.4和2.6不同造成您无法创建新的用户.

2.4架构

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

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"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我找不到正式的转换方法.因此,您可能需要db.system.users手动将2.4数据转换为2.6格式,或者删除2.4中的所有旧用户并在2.6中重新创建它们.

您可以使用以下命令进行升级.

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

参考文献:

  1. 将用户授权数据升级到2.6格式
  2. Sobolev Eugene的回答

  • 将数据库切换到admin`use admin`,并删除所有用户`db.system.users.remove({})` (3认同)

小智 24

在mongo控制台中尝试此命令

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });
Run Code Online (Sandbox Code Playgroud)

升级授权架构.