【问题标题】:Grails - Connect to a MongoDB database using authenticationGrails - 使用身份验证连接到 MongoDB 数据库
【发布时间】:2012-05-22 08:44:34
【问题描述】:

我正在尝试使用身份验证连接到我的 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

欢迎提出任何建议。 提前致谢。

【问题讨论】:

    标签: mongodb authentication grails database-connection database


    【解决方案1】:

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

    1. 像上面一样为 admin db 创建一个用户。
    2. 退出 mongo shell
    3. 跟随
    mongo
    use myDBname
    db.auth("adminlogin", "adminpwd")
    

    那将失败。但是试试这个吧。

    mongo
    use admin
    db.auth("adminlogin", "adminpwd")
    use myDBname
    

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

    因此,您需要做的就是直接连接到您想要的数据库并在该数据库中创建一个用户权限,如下所示:

    mongo
    use myDBname
    db.addUser("dblogin", "dbpwd")
    

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

    请注意,最后一部分是您的答案并解决了您的问题,但由于我为此苦苦挣扎并以艰难的方式弄清楚了,我认为上下文确实有助于更好地理解 mongo auth。

    保重

    【讨论】:

    • 感谢您的解决方案和详细解释。真的很感激。
    • 感谢您花时间解释。欣赏它。节省了我几个小时的挫败感。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多