MongoDB 3.0 权限问题

jacky_wyp 2015-12-22 06:37:21
给logMonitor库新建了一个用户log/log,数据如下:
{
"_id" : "logMonitor.log",
"user" : "log",
"db" : "logMonitor",
"roles" : [
{
"role" : "readWrite",
"db" : "logMonitor"
}
]
}


通过shell命令使用该用户连接正常:
[jboss@chonggouapp mongodb]$ mongo logMonitor -u "log" -p "log"
MongoDB shell version: 3.0.6
connecting to: logMonitor

通过java连接,提示Command failed with error 18: 'auth failed',以下是java代码:
public static void main(String[] args) throws UnknownHostException {
//地址
ServerAddress addr = new ServerAddress("xx.xx.xx.xx", 27017);
//权限验证
MongoCredential credential = MongoCredential.createMongoCRCredential(
"log", "logMonitor", "log".toCharArray());
//参数设置
MongoClientOptions options = MongoClientOptions.builder()
.serverSelectionTimeout(1000)
.build();
MongoClient mongoClient = new MongoClient(addr, Arrays.asList(credential), options);

MongoDatabase db = mongoClient.getDatabase("logMonitor");

long c = db.getCollection("sysLog").count();
System.out.println(c);
}

java执行异常信息:
Exception in thread "main" com.mongodb.MongoTimeoutException: Timed out after 1000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=xx.xx.xx.xx:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSecurityException: Exception authenticating}, caused by {com.mongodb.MongoCommandException: Command failed with error 18: 'auth failed' on server xx.xx.xx.xx:27017. The full response is { "ok" : 0.0, "errmsg" : "auth failed", "code" : 18 }}}]
at com.mongodb.connection.BaseCluster.createTimeoutException(BaseCluster.java:370)
at com.mongodb.connection.BaseCluster.selectServer(BaseCluster.java:101)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:75)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.<init>(ClusterBinding.java:71)
at com.mongodb.binding.ClusterBinding.getReadConnectionSource(ClusterBinding.java:63)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:65)
at com.mongodb.operation.CountOperation.execute(CountOperation.java:172)
at com.mongodb.operation.CountOperation.execute(CountOperation.java:43)
at com.mongodb.Mongo.execute(Mongo.java:738)
at com.mongodb.Mongo$2.execute(Mongo.java:725)
at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:167)
at com.mongodb.MongoCollectionImpl.count(MongoCollectionImpl.java:147)
at com.baosight.bsfc4.mn.lg.utils.Test.main(Test.java:34)


问题:为什么同样一个用户通过shell命令可以连接,但是通过java连接无法通过权限验证?
...全文
12735 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
戰华少 2017-05-12
  • 打赏
  • 举报
回复
MongoCredential.createCredential 这种方法,确定能解决验证?我这边怎么一直抛com.mongodb.MongoSecurityException: Exception authenticating
winterby 2016-07-06
  • 打赏
  • 举报
回复
感谢楼主分享,解决我的问题
爱人间 2016-05-10
  • 打赏
  • 举报
回复
谢谢楼主,解决了我的问题
文修 2015-12-23
  • 打赏
  • 举报
回复
多谢楼主,又学了一招
jacky_wyp 2015-12-23
  • 打赏
  • 举报
回复
引用 1 楼 congya001 的回复:
楼主你好 是否是没有授权呢? 楼主可以试一下在java程序运行的那个机器上用shell命令远程,看是否能够连接
谢谢,已解决。 java写法问题,应改成MongoCredential.createCredential
文修 2015-12-23
  • 打赏
  • 举报
回复
楼主你好 是否是没有授权呢? 楼主可以试一下在java程序运行的那个机器上用shell命令远程,看是否能够连接

1,746

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧