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

Ale*_*ier 4 database authentication grails database-connection mongodb

我正在尝试使用身份验证连接到我的MongoDB.我在我的Mongo服务器上这样做了:

use admin
db.addUser('adminLogin','adminPassword')
db.shutdownServer()
exit
Run Code Online (Sandbox Code Playgroud)

然后我再次启动我的服务器发布 mongod --auth

我在DataSource.groovy中设置了我的数据库配置,如下所示:

grails {
    mongo {
        host = "localhost"
        port = 27017
        username = "adminLogin"
        password = "adminPassword"
        databaseName = "my DB name"
        options {
            autoConnectRetry = true
            connectTimeout = 300
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我启动应用程序时收到以下错误消息:

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
Run Code Online (Sandbox Code Playgroud)

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

小智 13

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

  1. 像上面一样为admin db创建一个用户.
  2. 退出mongo shell
  3. 运行以下
mongo
use myDBname
db.auth("adminlogin", "adminpwd")
Run Code Online (Sandbox Code Playgroud)

那会失败.但试试这个.

mongo
use admin
db.auth("adminlogin", "adminpwd")
use myDBname
Run Code Online (Sandbox Code Playgroud)

这将起作用,因为您使用admin上下文切换到此db并且没有尝试直接连接到它.

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

mongo
use myDBname
db.addUser("dblogin", "dbpwd")
Run Code Online (Sandbox Code Playgroud)

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

请注意,最后一部分是你的答案,并解决了你的问题,但由于我努力解决这个困难的方式,我认为上下文真的有助于更好地理解mongo auth.

照顾自己