我无法远程验证mongodb.我正在运行由DigitalOcean One-Click安装程序提供的MongoDB 3.0.0,我似乎无法正确设置身份验证.
我有一个名为wbio_production的数据库.我尽可能地遵循mongodb docs教程.当我执行:
> db.auth("siteUserAdmin","MYPASSWORD")
1
> db.getUsers()
Run Code Online (Sandbox Code Playgroud)
输出是:
{
"_id" : "admin.siteUserAdmin",
"user" : "siteUserAdmin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
Run Code Online (Sandbox Code Playgroud)
当我切换到wbio_production数据库并执行相同的getUsers()时:
> use wbio_production
switched to db wbio_production
> db.getUsers()
[
{
"_id" : "wbio_production.herokuUser",
"user" : "herokuUser",
"db" : "wbio_production",
"roles" : [
{
"role" : "userAdmin",
"db" : "wbio_production"
},
{
"role" : "readWrite",
"db" : "wbio_production"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
但是,当我在Robomongo中填写连接表单时,它无法成功连接到数据库.授权始终失败,但它确实成功连接到数据库.
我尝试了以下使用上述用户的组合:
我有一个在localhost上运行的Mongodb服务器,没有身份验证(测试目的).在我的Java项目中,我已经为其添加了一个身份验证字段(以便用户可以修改配置,如果它处于信任模式,则只需将其留空).问题是,它被拒绝了,在Mongodb中,我得到:
星期六07月15日15:04:17.018 [conn4]字段丢失/收到的authenticat e命令testdb中的错误类型
我知道为什么会这样,但我想不出办法阻止它.它发生的原因是因为如果授权失败或者验证测试已经使用不同的凭据成功,db.authenticate()将返回false.在mongodb控制台中,我在上面的错误之前得到了这个:
星期六07月07日15:04:17.010 [initandlisten]连接从127.0.0.1:53602#4接受(现已打开2个连接)
其中一个连接是我的shell,另一个是项目.这是我的Java代码:
boolean auth =
db.authenticate(getConfig().getString("Database.username", ""),
getConfig().getString("Database.password", "").toCharArray());
if (!db.isAuthenticated() && auth == false) {
// Stop the application
}
Run Code Online (Sandbox Code Playgroud)
我必须阻止它以防止控制台变得丑陋.我不明白为什么:
!db.isAuthenticated()
Run Code Online (Sandbox Code Playgroud)
不行.这应该已经阻止了它的禁用.如果有人可以提供帮助,那就太好了!