如何使用用户名和密码连接到Java中的MongoDB 3.2?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用用户名和密码连接到Java中的MongoDB 3.2?相关的知识,希望对你有一定的参考价值。

我在我的应用程序中使用MongoDB 3.2。下面的代码演示了数据库初始化逻辑

private void dbInit(String dbName) {

    String mongoClientURI = "mongodb://" + DB_URL + ":" + DB_PORT;
    MongoClientURI connectionString = new MongoClientURI(mongoClientURI);

    // enable SSL connection
    MongoClientOptions.builder().sslEnabled(true).build();

    if (this.mongoClient == null) {
        this.mongoClient = new MongoClient(connectionString);
    }

    // create database if doesn't exist
    this.mongoClient.getDatabase(dbName);
}

这段代码工作正常,现在我想引入访问级别分离到数据库。

这样做的步骤:

  1. 定义用户: use myAppDB db.createUser( { "user": "myAdmin", "pwd": "123090d1487dd4ab7", roles: [ "readWrite", "dbAdmin" ] } ) use myAppDB db.createUser( { "user": "guest", "pwd": "guest", roles: [ "read" ] } )
  2. 在身份验证模式下重新创建MongoDB 3.2服务:"C:Program FilesMongoDBServer3.2inmongod.exe" --install --dbpath=C:datadb --logpath=C:dataloglog.txt --auth --service。并运行它。
  3. mongoClientURI连接字符串更改为 String mongoClientURI = "mongodb://" + DB_SRV_USR + ":" + DB_SRV_PWD + "@" + DB_URL + ":" + DB_PORT; 其中DB_SRV_USR = myAdminDB_SRV_PWD = 123090d1487dd4ab7
  4. 使用相同的凭据检查IDEA的Mongo Explorer中经过身份验证的连接,一切正常。
  5. 执行我的应用程序并获得异常Authentication failed

我的问题:

  1. 如何使用用户名和密码连接到Java中的MongoDB 3.2?我看到了几个examples,但他们正在使用弃用的方法。
  2. 我应该将我的用户添加到myAppDBadmin表吗?在一些教程中,我看到用户是在admin表中创建的,这是一个好主意还是值得在他们将要使用的数据库中创建用户?
答案

使用mongodb-3.4.2和mongo-java-driver-3.4.2.jar进行测试

(1)使用MongoCredential

MongoCredential credential = MongoCredential.createCredential("user", "database", "passwd".toCharArray());
MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", 27017), Arrays.asList(credential));
MongoDatabase db = mongoClient.getDatabase( "test" );
MongoCollection collection = db.getCollection("mycol");
FindIterable fi = collection.find();
MongoCursor cursor = fi.iterator();

(2)使用MongoClientURI

MongoClientURI uri = new MongoClientURI("mongodb://user:passwd@localhost:27017/?authSource=test");
MongoClient mongoClient = new MongoClient(uri);

有一些变体形式可以将MongoCredential和MongoClientURI用于不同的身份验证机制,请查看here以获取详细信息

另一答案

正如MarkusWMahlberg正确指出的那样,有必要记下连接字符串中的数据库名称。

例如:

String mongoClientURI = "mongodb://" + DB_SRV_USR + ":" + DB_SRV_PWD + "@" + DB_URL + ":" + DB_PORT + "/" + dbName;

以上是关于如何使用用户名和密码连接到Java中的MongoDB 3.2?的主要内容,如果未能解决你的问题,请参考以下文章

使用java连接到windows中的共享文件夹

如何通过用户名和密码连接到远程 Redis 服务器

如何通过编程设置用户名和密码来连接到 ActiveMQ 服务器?

Django - Oracle,如何使用为用户提供的用户/密码连接到只读数据库

使用用户名和密码将画面连接到雪花时出错

每次Access连接到SQL Server而不使用Windows身份验证时,如何避免手动输入登录名和密码