我只是从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风格的说明,对我来说很好。
答案 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"}] )
...等等。