如何将默认身份验证方法从SCRAM-SHA-1更改回MONGODB-CR

时间:2015-06-15 20:11:21

标签: mongodb pymongo

我只是从2.4升级到mongodb 3.0,当我登录时收到此错误:

 "Failed to authenticate thisuser@admin with mechanism MONGODB-CR:    AuthenticationFailed MONGODB-CR credentials missing in the user document"

在stackoverflow的其他地方,我发现有人为此而攻击,但我在哪里可以指定整个数据库使用CR作为方法?这不是一个全球性的环境吗?

我正在使用pymongo,它有CR风格的说明,对我来说很好。

1 个答案:

答案 0 :(得分:0)

在从几个来源阅读相同的答案后,我发现了一个详细的足够详细的解决方案,值得在这里分享。这些路径特定于webfaction.com,但您可以明显调整端口和路径以适合自己。

1)启动MongoDB 3.0而不启用--auth,因此您可以更改其身份验证方式。

    来自/webapps/mongo/bin/
  • ./mongod --dbpath $HOME/webapps/mongo/data --port 1400

  • 以管理员身份登录SSH 从/webapps/mongo/bin/运行 ./mongo localhost:1400/admin

2)在管理员数据库的SSH中运行mongodb:

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

currentVersion = 3将生成默认的MONGODB-CR,MongoDB版本2x的默认值。版本3.0默认使用SCRAM-SHA-1。

3)启用--auth重启MongoDB。 来自/webapps/mongo/bin我会跑 ./mongod --dbpath $HOME/webapps/mongo/data --setParameter authenticationMechanisms=MONGODB-CR --auth --port 1400

...如果我希望此服务保持活动状态,它将是: @reboot nohub nice <FULL PATH>/mongod --dbpath $HOME/webapps/mongo/data --setParameter authenticationMechanisms=MONGODB-CR --auth --port 1400

setParameter authenticationMechanisms=MONGODB-CR可能是多余的,或者毫无意义,但我暂时将其留在那里。

现在只要我的用户帐户与该数据库关联,我就可以远程连接,使用管理数据库中的db.grantRolesToUser( "marc", [ {role: "readWrite", db:"fbc"}, {role: "dbOwner", db:"fbc"}] ) ...等等。