我正在尝试使用身份验证连接到我的MongoDB。 我在我的Mongo服务器上做了这个:
use admin
db.addUser('adminLogin','adminPassword')
db.shutdownServer()
exit
然后我再次启动服务器mongod --auth
我在DataSource.groovy中设置了我的数据库配置,如下所示:
grails {
mongo {
host = "localhost"
port = 27017
username = "adminLogin"
password = "adminPassword"
databaseName = "my DB name"
options {
autoConnectRetry = true
connectTimeout = 300
}
}
}
启动应用程序时出现以下错误消息:
ERROR context.GrailsContextLoader - Error executing bootstraps: Error creating bean
with name 'mongoDatastore': FactoryBean threw exception on object creation; nested
exception is org.springframework.data.mongodb.CannotGetMongoDbConnectionException:
Failed to authenticate to database
任何建议都是最受欢迎的。 提前致谢。
答案 0 :(得分:13)
我遇到了同样的问题,所以我可以帮助解释Mongo如何进行身份验证。你看到你做的是你在管理数据库中创建了一个管理员用户,这很棒。但是,您尝试直接与管理员用户连接到“mydb”,这是不允许的。声音混乱?这是因为它是。为了更好地说明这一点,这是一个简单的练习:
mongo use myDBname db.auth("adminlogin", "adminpwd")
那会失败。但试试这个。
mongo use admin db.auth("adminlogin", "adminpwd") use myDBname
这样可行,因为您使用admin上下文切换到此db并且没有尝试直接连接到它。
因此,您需要做的就是直接连接到您想要的数据库并在该数据库中创建用户,如下所示:
mongo use myDBname db.addUser("dblogin", "dbpwd")
用这个更新你的grails配置文件,我打赌你会工作。
请注意,最后一部分就是你的答案并解决了你的问题,但是由于我努力解决这个问题并且认真思考,我认为上下文真的有助于更好地理解mongo auth。
保重