【问题标题】:MongoDB-CR Authentication failedMongoDB-CR 身份验证失败
【发布时间】:2020-11-21 00:29:54
【问题描述】:

验证用户时出现以下错误:purchase_user@purchase 失败。 MongoDB-CR 身份验证失败。当我通过浏览器访问网络服务时,用户文档中缺少凭据。

但我能够从 mongo 验证 purchase_user 它返回 1 。

【问题讨论】:

    标签: mongodb spring-data-mongodb


    【解决方案1】:

    转到 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 })
    

    现在重新启动 mongod 并创建新用户,然后它应该可以正常工作了。

    注意:仅在测试数据库中使用删除命令,如果在生产中使用更新。

    Kubernetes Helm Chart 的认证信息

    如果您删除所有用户并在配置中启用身份验证(或在 Kubernetes helm 图表上默认设置的 --auth 参数),则无法再访问 MongoDB。它需要禁用身份验证,创建一个新用户,然后重新启用它。

    在 Kubernetes 上,您需要编辑参数并添加 --noauth 作为参数,因为它不是经典安装的 MongoDB 上的默认值。有关--noauth 和相应的--auth 的更多信息,请参阅the CLI documentation

    【讨论】:

    • 这不会导致任何不一致或安全问题吗?作为记录,您的解决方案解决了我的问题。
    • 谢谢,它对我有用。只是为了学习,为什么会出现这个问题?
    • 请记住,在降级架构之前,您应该禁用身份验证,否则一旦您从 db.system.users 中删除用户,您的用户就会失效。保重
    • 不允许删除 FeatureCompatibilityVersion 文档
    • 删除当前版本时出现问题,显示“FeatureCompatibilityVersion 文档不允许”
    【解决方案2】:

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

    1. 列表项
    2. 删除创建的用户。
    3. 修改集合 admin.system.version,使 authSchema 的 currentVersion 为 3 而不是 5(3 使用 MongoDB-CR)。
    4. 重新创建您的用户。

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

    【讨论】:

    • 这个应该被标记为正确答案,当然。
    • 如何修改 admin.system.version ?
    【解决方案3】:

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

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

    【讨论】:

    • 我在哪里做这个?它需要什么用户权限?当我尝试时,我得到“未授权查询 admin.system.version”。
    • 嘿@MarcMaxson 请参阅下面的回复。您需要在运行 acabra 提供的命令后删除您的初始管理员并重新创建一个。您在进行架构更改之前创建的任何管理员都将不起作用。这也让我发疯了。
    • @acabra85 谢谢你的步骤。此步骤与最佳答案相结合可帮助我解决该问题。
    【解决方案4】:

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

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

    2) 运行(选择“admin”后使用db):

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

    schema.currentVersion = 3

    db.system.version.save(模式)

    3) 启用身份验证后重新启动 mongodb。

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

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

    答案来自这里:https://jira.mongodb.org/browse/SERVER-17459

    【讨论】:

      【解决方案5】:

      Vivek 将上述解决方案添加到上述解决方案中并进行了解释from here

      use admin
      db.system.users.remove({})    <== removing all users
      db.system.version.remove({}) <== removing current version 
      db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })
      
      • 您只需要降级架构即可创建 MONGODB-CR 用户。 一旦他们在那里,无论价值如何,旧司机都会工作 的 authSchemaVersion。但是,如果您运行 authSchemaUpgrade 来更改 从“3”到“5”,用户显然会升级。
      • 我对新用户的评论是,如果您有现有的 SCRAM 用户并将架构手动更改为“3”,用户文档不会 与新架构保持一致。然而,这不是强制执行的,但是 SCRAM 用户仍然可以使用任何支持 SCRAM 的驱动程序。

      【讨论】:

        【解决方案6】:

        将 mongo-java-driver 升级到 3.0.3 并使用:-

        MongoCredential.createScramSha1Credential 而不是 MongoCredential.createMongoCRCredential

        MongoCredential createMongoCRCredential = MongoCredential.createScramSha1Credential(mongoConfiguration.getDatabaseUserName(), mongoConfiguration.getAuthenticationDatabase(),mongoConfiguration.getDatabasePassword().toCharArray());

        http://docs.mongodb.org/master/release-notes/3.0-scram/

        【讨论】:

        • 这正是我正在寻找的解决问题的方法。我最初使用版本 3.2.4 的 cli mongo 创建了用户。它使用 SHA1 进程创建了用户。我的代码尝试使用之前的 CR 流程进行连接。更改为 MongoCredential.createScramSha1Credential() 是迄今为止更好的解决方法,而不是降级。
        【解决方案7】:

        对我来说,我正在使用 mongo 2 客户端尝试连接到 mongo 3 服务器。升级客户端解决了这个问题。

        【讨论】:

          【解决方案8】:

          我也遇到了这个错误。

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

          跟踪 mongodb 日志文件帮助我诊断了这一点。

          【讨论】:

            【解决方案9】:
            • 卸载Ubuntu提供的mongodb-clients
            • 安装mongodb-org-shell官方提供的MongoDB

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

            【讨论】:

              【解决方案10】:

              可能是旧消息,问题已解决,但添加了我遇到相同错误的经验:

              我遇到了完全相同的问题(使用 MongoDB 3.0),并且 C# 驱动程序设置为使用 3.0 之前的 db。

              在 C# 中,我使用了“MongoDB.Driver.CreateMongoCRCredentials()”,这导致了 OP 遇到的错误。

              解决方法(对我而言)是将上面的命令切换为“MongoDB.Driver.CreateCredential()”。

              我猜这可能是由于在升级的系统上使用“旧”用户(从 3.0 之前)引起的。这要么迫使您将用户升级到新的身份验证机制,要么降级服务器上的身份验证机制。

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                  【解决方案12】:

                  对于那些因not authorized on admin to execute commandremoving FeatureCompatibilityVersion document is not allowed 错误而在 MongoDB 3.6 中更新身份验证架构(请参阅accepted answer)的人来说,这对我有用。

                  解决第一个错误

                  > 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\" }"
                          }
                  })
                  

                  我必须创建一个自定义角色,允许对任何资源和具有此角色的用户执行任何操作,然后使用该新用户登录到管理数据库:

                  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 角色的admin 用户或在配置中禁用security.authorization 对我不起作用,并且在尝试更新system.version 表时仍然出现相同的错误。)

                  在那之后我又遇到了另一个错误

                  > db.system.version.remove({})
                  WriteResult({
                          "nRemoved" : 0,
                          "writeError" : {
                                  "code" : 40670,
                                  "errmsg" : "removing FeatureCompatibilityVersion document is not allowed"
                          }
                  })
                  

                  要解决这个问题,我们应该只更新authSchema 文档而不是删除整个集合。

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

                  db.system.version.update({"_id": "authSchema"}, {currentVersion: 3})
                  

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

                  (我实际上是躺在这里 - 它仍然会在 admin 数据库中创建,只是使用 mydb.myuser id 而不是 admin.myuser。但我使用相同的方式来描述正在使用的这些东西在 MongoDB 文档中。我想这就是它在以前版本中的实际工作方式,通常我们不应该关心内部实现细节。)

                  use mydb
                  db.createUser({user: 'myuser', pwd: 'mypwd', roles: [{role: 'dbOwner', db: 'mydb'}]})
                  

                  别忘了清理

                  use admin
                  db.system.version.update({"_id": "authSchema"}, {currentVersion: 5})
                  exit
                  
                  mongo admin -u admin -p
                  
                  db.dropUser('superadmin')
                  db.dropRole('fullaccess')
                  

                  您可能希望保留 admin 用户 - 即使禁用了 security.authorization 设置,我也无法再次创建它。看起来如果admin.system.users 表中有任何记录,则该设置不再起作用,mongo 需要身份验证才能执行某些操作。

                  【讨论】:

                    【解决方案13】:

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

                    spring.data.mongodb.uri=mongodb://myusername:mypassword@localhost/?authSource=admin&authMechanism=SCRAM-SHA-1
                    spring.data.mongodb.database=test
                    

                    【讨论】:

                      猜你喜欢
                      • 2016-09-07
                      • 1970-01-01
                      • 2015-05-06
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-01-19
                      • 2022-01-18
                      • 2021-04-24
                      • 2018-11-27
                      相关资源
                      最近更新 更多