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

时间:2012-05-14 20:29:22

标签: 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 = 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

任何建议都是最受欢迎的。 提前致谢。

1 个答案:

答案 0 :(得分:13)

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

  1. 像上面一样为admin db创建一个用户。
  2. 退出mongo shell
  3. 运行以下
  4. 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。

    保重