gpt4 book ai didi

mongodb - mongodb用户身份验证问题

转载 作者:行者123 更新时间:2023-12-02 14:30:38 24 4
gpt4 key购买 nike

我正在尝试从SERVER-1连接到在其他服务器SERVER-2中运行的mongo服务器
因此,我的grails应用程序正在SERVER-1中运行。所以我给了这样的外部配置。

grails {
mongo {
host = "<SERVER-2>-host"
port = 27017
username = "myapp"
password = "myapp"
databaseName = "myapp"
options {
autoConnectRetry = true
connectTimeout = 3000
}
}
}

在SERVER-2中,我使用相同的用户和凭据创建了myapp db
use myapp
db.createUser( { "user" : "myapp",
"pwd": "myapp",
"roles" : [] },
{ w: "majority" , wtimeout: 5000 } )

并能够看到如下用户列表
> db.getUsers()
[
{
"_id" : "myapp.myapp",
"user" : "myapp",
"db" : "myapp",
"roles" : [ ]
}
]

Mongo配置包含“noauth = true”,
从SERVER-1,我可以使用以下命令连接到SERVER-2 mongo
mongo SERVER-2-HOST:27017/myapp  -u myapp -p myapp

但是,当我尝试从SERVER-1 grails应用程序连接时,出现以下错误
| Error Error executing script LoadVars: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'mongoTransactionManager' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoTransactionManager': Cannot resolve reference to bean 'mongoDatastore' while setting bean property 'datastore'; nested exception is org.springframework.beans.factory.BeanCreationException: 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 [myapp], username = [myapp], password = [m***p]

我的mongod.conf文件
# mongod.conf

logpath=/var/log/mongodb/mongod.log

logappend=true

fork=true

#port=27017

dbpath=/var/lib/mongo

pidfilepath=/var/run/mongodb/mongod.pid

# Listen to local interface only. Comment out to listen on all interfaces.
#bind_ip=127.0.0.1

# nojournal=true

#cpu=true

#noauth=false
auth=true

我在这里想念什么吗?

最佳答案

看起来您的MongoDB服务器正在运行并且正在正确侦听,但是无法进行身份验证。

我看到的第一个问题是,您提到了Grails应用程序在MongoDB服务器位于第二台服务器上时在第一台服务器上运行,但是host配置中的DataSource.groovy配置为连接到第一台主机,而不是第二台主机。这仅仅是在示例中还是您的代码确实连接到第一台服务器(这是错误的)?请验证一下。

第二个问题可能与您将用户添加到数据库名称myapp的方式有关。请按照以下步骤操作,然后在连接后重试:

1)登录第二台主机上的MongoDB实例:mongo2)使用您的数据库use myapp3)通过运行myapp来验证您没有名为db.dropUser("myapp")的用户
4)现在添加用户:

db.createUser({
user: "myapp",
pwd: "myapp",
roles: [ "readWrite", "dbAdmin" ]
});

现在连接您的Grails应用程序。

更新

如果您使用的是MongoDB 3.x和Grails 2.5.x或2.4.x,那么这应该是身份验证失败的问题。我差点忘了告诉你这个问题。

Grails以某种方式发布了较旧版本的Java驱动程序,即 2.12.3,并且为了支持MongoDB 3,我们要求Java驱动程序的最低 2.13.x。另外,MongoDB 3.0不需要3.0 Java驱动程序升级。 2.13.0版本是与MongoDB 3.0完全兼容的最低要求。

https://github.com/mongodb/mongo-java-driver/releases/tag/r3.0.0

因此,在您的 BuildConfig.groovy中将其添加为 dependency:
dependencies {
compile "org.mongodb:mongo-java-driver:2.13.1"
}

另外,如果您使用的是Grails mongeez插件,请从此处排除Java驱动程序:
compile (":mongeez:0.2.3") {
excludes("mongo-java-driver")
}

我将在Grails中为此创建一张票。希望这可以帮助!

关于mongodb - mongodb用户身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32858484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com