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

Posted

技术标签:

【中文标题】Grails - 使用身份验证连接到 MongoDB 数据库【英文标题】:Grails - Connect to a MongoDB database using authentication 【发布时间】: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

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

【问题讨论】:

【参考方案1】:

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

    像上面一样为 admin db 创建一个用户。 退出 mongo shell 跟随
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。

保重

【讨论】:

感谢您的解决方案和详细解释。真的很感激。 感谢您花时间解释。欣赏它。节省了我几个小时的挫败感。

以上是关于Grails - 使用身份验证连接到 MongoDB 数据库的主要内容,如果未能解决你的问题,请参考以下文章

远程连接到 MSSQL,使用 Windows 身份验证,JAVA

Grails - ShiroSecurity - 手动登录用户

使用身份密钥连接到远程主机(其他身份验证方法?)

使用 Windows 身份验证连接到 SQL Server

通过***通过Windows身份验证连接到sql [关闭]

当 Composer 连接到 GitHub 时,我收到有关弃用身份验证方法的警告。我应该使用啥身份验证配置?