JAVA com.mongodb.MongoQueryException:查询失败,错误代码为13,并显示错误消息“命令find需要身份验证”

jxct1oxe  于 2023-05-28  发布在  Go
关注(0)|答案(2)|浏览(538)

com.mongodb.MongoQueryException:查询失败,错误代码为13,并显示错误消息“命令find需要身份验证”
如何在java中使用密码创建mongo客户端。
我知道有这样的方法:

public MongoClient(final ServerAddress addr, final List<MongoCredential> credentialsList);

但是它被显示为已弃用,还有另一个方法需要MongoClientOptions:

public MongoClient(final ServerAddress addr, final MongoCredential credential, final MongoClientOptions options)

但我没有任何选项可以发送。那么,有没有什么方法可以使用密码在java中创建mongo客户端呢?

4ioopgfo

4ioopgfo1#

要执行find命令,您需要首先通过mongo进行身份验证。以下是如何执行身份验证的示例:

Mongo mongo = new Mongo("localhost", 27017);
DB db = mongo.getDB("testdb");

boolean auth = db.authenticate("testdb", "password".toCharArray());
if (auth) {

    DBCollection table = db.getCollection("user");

    BasicDBObject document = new BasicDBObject();
    document.put("name", "mkyong");
    table.insert(document);

    System.out.println("Login is successful!");
} else {
    System.out.println("Login is failed!");
}

这对你来说应该没问题。
您可以查看本文中的示例代码:https://www.mkyong.com/mongodb/java-authentication-access-to-mongodb/
当使用mongo-java-driver时,以下是合适的:- 注意,这里不再使用已弃用的方法,而是将writeconcern设置为Journaled(推荐使用)

String username = "test";
String database = "something";
String password = "secret";

MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray());
MongoClientOptions options = MongoClientOptions.builder()
.writeConcern(WriteConcern.JOURNALED).build();

MongoClient mongoClient = new MongoClient(new ServerAddress("host1", 27017), Arrays.asList(mongoCredential), options);
6yoyoihd

6yoyoihd2#

如果您使用的是MongoDB Atlas,那么您必须为db用户的给定Role给予对DB的访问权限。
这个问题主要是因为没有给予用户访问它的权限。

相关问题