Grails-使用身份验证连接到MongoDB数据库

Grails-使用身份验证连接到MongoDB数据库,mongodb,authentication,grails,database-connection,database,Mongodb,Authentication,Grails,Database Connection,Database,我正在尝试使用身份验证连接到我的MongoDB。 我在Mongo服务器上执行了以下操作: use admin db.addUser('adminLogin','adminPassword') db.shutdownServer() exit 然后我再次启动服务器,发出mongod--auth 我在DataSource.groovy中设置了数据库配置,如下所示: grails { mongo { host = "localhost" port = 2701

我正在尝试使用身份验证连接到我的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
任何建议都欢迎。
提前谢谢

我遇到了同样的问题,所以我可以帮助解释Mongo是如何进行身份验证的。你看到你所做的是你在管理数据库中创建了一个管理用户,这很好。但是,您正试图通过管理员用户直接连接到“mydb”,这是不允许的。听起来很困惑?因为它是。为了更好地说明这一点,这里有一个简单的练习:

  • 像上面那样为管理数据库创建一个用户
  • 退出mongo shell
  • 跟踪
  • 这将失败。但是试试这个

    这将起作用,因为您使用管理上下文切换到此数据库,并且没有尝试直接连接到它

    因此,您只需直接连接到所需的数据库,并在该数据库中创建用户权限,如下所示:

    用这个更新你的grails配置文件,我打赌它会工作的

    请注意,最后一部分是您的答案,解决了您的问题,但由于我一直在努力解决这个问题,并以艰难的方式解决了它,我认为上下文确实有助于更好地理解mongo auth


    小心

    谢谢您的解决方案和详细解释。非常感谢。谢谢你花时间解释。谢谢。省去了我几个小时的沮丧。
    mongo
    use myDBname
    db.auth("adminlogin", "adminpwd")
    
    mongo
    use admin
    db.auth("adminlogin", "adminpwd")
    use myDBname
    
    mongo
    use myDBname
    db.addUser("dblogin", "dbpwd")