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

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

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

最佳答案

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

  1. 像上面那样为管理数据库创建一个用户。
  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。

保重

关于mongodb - Grails - 使用身份验证连接到 MongoDB 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590562/

相关文章:

php - MongoDB - 存储和读取数据的最佳方式

mongodb - 如何将 NoSQL 与 Data Vault 2.0 建模集成?如何使用哈希键来集成NoSQL DB?

javascript - 灵活的 JavaScript 函数(适用于 MongoDB)

node.js - 如何在 Feathersjs 身份验证中创建自定义 HashPassword 函数

grails - 如何将日期存储为字符串时按日期进行搜索?

node.js - 如何创建通过特定参数过滤搜索的查询字符串?

express - 使用 expressjs + socket.io + redis + express-session 登录系统

authentication - Auth0 的优点

grails - 父级上的Grails级联删除是一对一删除子级记录

grails - 防止陌生人访问WEBRTC页面