MongoDB-CR身份验证失败

ash*_*ini 47 mongodb spring-data-mongodb

我在验证用户时遇到以下错误:purchase_user @ purchase failed.MongoDB-CR身份验证失败.我通过浏览器访问webservice时缺少用户文档中的凭据.

但我可以从mongo验证purchase_user,它返回1.

Viv*_*vex 84

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

现在重新启动mongod并创建新用户然后它应该工作正常.

注意:如果在生产中使用更新,则仅在测试数据库中使用remove命令.

  • 不允许删除FeatureCompatibilityVersion文档 (3认同)
  • 只需记住,在升级架构之前,您应该禁用身份验证,否则从db.system.users中删除用户后,您的用户将失效。照顾自己 (2认同)

小智 20

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

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

现在应该没有问题.


aca*_*a85 18

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

var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
Run Code Online (Sandbox Code Playgroud)

  • 我在哪里做这个?它需要什么用户权限?当我尝试时,我得到“未授权查询 admin.system.version”。 (2认同)

Ahm*_*que 11

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

1)启动3.0而不启用auth.(需要禁用身份验证,否则您将获得未经授权的错误).

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

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

schema.currentVersion = 3

db.system.version.save(架构)

3)启用auth重启mongodb.

4)创建一个新的管理员用户(旧的管理员用户,在此解决方法之前创建的用户将无效).

事情现在应该奏效.这个问题也让我发疯了.

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


Zub*_*lam 8

Vivek补充上述解决方案并从此处解释

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