修补MongoDB未授权访问漏洞,需要给数据添加权限验证,在添加上用户密码后,连接数据库报如下错误:
[[ACTIVE] ExecuteThread: ‘2‘ for queue: ‘weblogic.kernel.Default (self-tuning)‘] 16:11:57 ERROR (LoginLoggerDaoImpl.queryPage:85) - 查询数据库:Failed to authenticate to database [sgccoa], username = [amsdb], password = [a*******6] org.springframework.data.mongodb.CannotGetMongoDbConnectionException: Failed to authenticate to database [sgccoa], username = [amsdb], password = [a*******6] at org.springframework.data.mongodb.core.MongoDbUtils.doGetDB(MongoDbUtils.java:115) at org.springframework.data.mongodb.core.MongoDbUtils.getDB(MongoDbUtils.java:75) at org.springframework.data.mongodb.core.SimpleMongoDbFactory.getDb(SimpleMongoDbFactory.java:118) at org.springframework.data.mongodb.core.SimpleMongoDbFactory.getDb(SimpleMongoDbFactory.java:107) at org.springframework.data.mongodb.core.MongoTemplate.getDb(MongoTemplate.java:1258) at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:387) at org.springframework.data.mongodb.core.MongoTemplate.count(MongoTemplate.java:591) at org.springframework.data.mongodb.core.MongoTemplate.count(MongoTemplate.java:582)
经查证,此错误与使用连接mongodb的驱动版本有关,当前数据库版本为3.0.7,使用的mongo-java-driver版本是2.10.1,mongo-java-driver-2.10.1.jar并不支持3.0的数据库,在不开启权限验证的时候使用并无问题,开启权限验证后报以上错误。
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.2.1.RELEASE</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.10.1</version> </dependency>
要解决此问题需要将此jar包的版本更新到支持mongodb3.0以上的版本,在官网上有对应版本的兼容性示意图:
可以看出至少需要2.13,只需要将mongo-java-driver更新到2.13或以上可以了
注1:因为spring-data-mongodb是1.2.1.RELEASE,只能更新到2.13或2.14,如果更新到3.0或以上,会因为spring-data-mongodb不支持出现其他异常.
注2:因为spring使用的是3.1.0.RELEASE系列,对spring-data-mongodb的支持只到了1.3,虽然mongo-java-driver-2.14.3.jar对应的是spring-data-mongodb-1.10.1.jar,也只能使用原来的包,更新spring-data-mongodb会导致spring的一系列包都必须更新。spring-data-mongodb.1.6以上的版本需要配置的spring的版本需要4.0以上