MongoDB CR身份验证失败

MongoDB CR身份验证失败,mongodb,spring-data-mongodb,Mongodb,Spring Data Mongodb,我在验证用户时遇到以下错误:购买_user@purchase失败。MongoDB CR身份验证失败。通过浏览器访问Web服务时,用户文档中缺少凭据 但是我能够从mongo验证购买用户,它返回1。也有同样的问题。发生在我身上的是,当我使用MongoDB 3创建我的用户时,它使用SCRAM-SHA-1作为其身份验证机制,而不是MongoDB-CR。我必须做的是: 列表项 删除创建的用户 修改集合admin.system.version,使authSchema的当前版本为3而不是5(3使用MongoD

我在验证用户时遇到以下错误:购买_user@purchase失败。MongoDB CR身份验证失败。通过浏览器访问Web服务时,用户文档中缺少凭据


但是我能够从mongo验证购买用户,它返回1。

也有同样的问题。发生在我身上的是,当我使用MongoDB 3创建我的用户时,它使用SCRAM-SHA-1作为其身份验证机制,而不是MongoDB-CR。我必须做的是:

  • 列表项
  • 删除创建的用户
  • 修改集合admin.system.version,使authSchema的当前版本为3而不是5(3使用MongoDB CR)
  • 重新创建您的用户

  • 现在应该可以正常工作了。

    第2步。上面没有详细说明,我找到了这个解决方案并为我工作

    var schema = db.system.version.findOne({"_id" : "authSchema"})
    schema.currentVersion = 3
    db.system.version.save(schema)
    

    我也犯了这个错误

    检查Spring配置文件。。我有一个名为“MONGODB-CR”的构造函数arg,我将其替换为“SCRAM-SHA-1”,它解决了我的问题


    跟踪mongodb日志文件有助于我诊断此问题。

    我认为这就是您需要的答案:

    1) 在未启用身份验证的情况下启动3.0。(需要禁用身份验证,否则将出现未授权错误)

    2) 运行(选择“管理”后使用数据库):

    var schema=db.system.version.findOne({“\u id”:“authSchema”})

    schema.currentVersion=3

    db.system.version.save(架构)

    3) 在启用身份验证的情况下重新启动mongodb

    4) 创建一个新的管理员用户(旧用户,您在此解决方案之前创建的用户将不起作用)

    事情现在应该可以解决了。这个问题也让我发疯


    答案来自这里:

    转到mongoDB控制台并删除当前用户&将authSchema版本设置为3而不是5,在mongo控制台中执行以下命令-

    mongo
    use admin
    db.system.users.remove({})    <== removing all users
    db.system.version.remove({}) <== removing current version 
    db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })
    
    mongo
    使用管理员
    
    db.system.users.remove({})将mongo java驱动程序升级到3.0.3并使用:-

    MongoCredential.createScramSha1Credential而不是MongoCredential.createMongoCRCredential

    MongoCredential CreateMongorCredential=MongoCredential.createScramSha1Credential(mongoConfiguration.getDatabaseUserName()、mongoConfiguration.getAuthenticationDatabase()、mongoConfiguration.getDatabasePassword().ToCharray())


    可能是老消息,问题已经解决,但我的经验也有同样的错误:

    我遇到了完全相同的问题(使用MongoDB3.0),还有一个C#驱动程序被设置为使用3.0DB之前的版本

    在C#中,我使用了“MongoDB.Driver.createMongorCredentials()”,这导致OP出现错误

    对我来说,修复方法是将上面的命令切换到“MongoDB.Driver.CreateCredential()”


    我想这可能是因为在升级系统上使用“旧”用户(3.0之前的版本)造成的。这会迫使您将用户升级到新的身份验证机制,或降低服务器上的身份验证机制。

    Vivek向上述解决方案添加内容&已接受解释

    使用admin
    
    db.system.users.remove({})对我来说,我使用的是一个Mongo2客户端试图连接到Mongo3服务器。升级客户端解决了这个问题。

    我在使用新的MongoDB 3.2.8数据库的Spring Boot应用程序中遇到了相同的错误。通过升级到最新版本的Java Mongo驱动程序(3.2.2),然后将身份验证机制param添加到我的application.properties中的URI,我能够让它工作:

    spring.data.mongodb.uri=mongodb://myusername:mypassword@localhost/?authSource=admin&authMechanism=SCRAM-SHA-1
    spring.data.mongodb.database=test
    
    • 卸载Ubuntu提供的mongodb客户端软件包
    • 安装官方提供的mongodb组织外壳

    这就解决了问题,因为Ubuntu提供的非官方mongodb包不是由mongodb维护的。您应该始终使用官方的MongoDB MongoDB org软件包,这些软件包与最新的主要和次要MongoDB版本保持同步。

    2018年6月,我在尝试从安装在/usr/bin中的旧客户端连接到我的MongoDB 3.6版后出现此错误。我将mongo DB安装在操作系统标准目录之外的一个单独文件夹中,因此我的安装与软件包管理器安装的旧版本相冲突

    对于那些在MongoDB 3.6中由于
    未被授权在admin上执行命令以及
    不允许删除FeatureCompatibilityVersion文档而难以更新身份验证架构(请参阅)的人,这对我来说是有效的

    var schema = db.system.version.findOne({"_id" : "authSchema"})
    schema.currentVersion = 3
    db.system.version.save(schema)
    
    要解决第一个错误,请执行以下操作:

    > db.system.version.remove({})
    WriteResult({
            "writeError" : {
                    "code" : 13,
                    "errmsg" : "not authorized on admin to execute command { update: \"system.version\", ordered: true, lsid: { id: UUID(\"58e86006-d889-440a-bd83-ad09fcd81747\") }, $db: \"admin\" }"
            }
    })
    
    > db.system.version.remove({})
    WriteResult({
            "nRemoved" : 0,
            "writeError" : {
                    "code" : 40670,
                    "errmsg" : "removing FeatureCompatibilityVersion document is not allowed"
            }
    })
    
    use admin
    db.system.version.update({"_id": "authSchema"}, {currentVersion: 5})
    exit
    
    mongo admin -u admin -p
    
    db.dropUser('superadmin')
    db.dropRole('fullaccess')
    
    我必须创建一个自定义角色,允许对任何资源和具有此角色的用户执行任何操作,然后使用该新用户登录到管理数据库:

    mongo admin
    
    db.createUser({user: 'admin', pwd: 'mypwd', roles: ['root']})
    exit
    
    mongo admin -u admin -p
    
    db.createRole({role: 'fullaccess', privileges: [{resource: {anyResource: true}, actions: ["anyAction"]}], roles: []})
    db.createUser({user: 'superadmin', pwd: 'mypwd', roles: ['fullaccess']})
    exit
    
    mongo admin -u superadmin -p
    
    (仅使用具有
    root
    角色的
    管理员
    用户,或在配置中禁用
    安全性.授权
    对我无效,并且在尝试更新
    系统.版本
    表时仍然存在相同的错误。)

    在那之后,我又犯了一个错误:

    > db.system.version.remove({})
    WriteResult({
            "writeError" : {
                    "code" : 13,
                    "errmsg" : "not authorized on admin to execute command { update: \"system.version\", ordered: true, lsid: { id: UUID(\"58e86006-d889-440a-bd83-ad09fcd81747\") }, $db: \"admin\" }"
            }
    })
    
    > db.system.version.remove({})
    WriteResult({
            "nRemoved" : 0,
            "writeError" : {
                    "code" : 40670,
                    "errmsg" : "removing FeatureCompatibilityVersion document is not allowed"
            }
    })
    
    use admin
    db.system.version.update({"_id": "authSchema"}, {currentVersion: 5})
    exit
    
    mongo admin -u admin -p
    
    db.dropUser('superadmin')
    db.dropRole('fullaccess')
    
    要解决这个问题,我们应该只更新
    authSchema
    文档,而不是删除整个集合

    (一般来说,您不应该在生产环境中盲目地从系统表中删除所有内容,并始终检查更新它们会带来什么影响,因此这是只更新所需记录的另一个原因。)

    现在,您应该能够使用旧的身份验证机制创建用户。您可能还需要首先切换到数据库,以便在该数据库中而不是在
    admin
    one中创建用户。否则,您必须在连接字符串中使用
    authSource=admin
    参数

    (实际上我躺在这里-它仍然将在
    admin
    数据库中创建,只是使用
    mydb.myuser
    id而不是
    admin.myuser
    。但是我使用与MongoDB文档中使用的描述这些内容相同的方式。我想这就是它在上一版本中实际使用的方式。)