デフォルトでは、MongoDBは信頼環境で実行されます(ユーザー名とパスワードによる認証は不要です)。このチュートリアルでは、セキュアモードでMongoDBを起動し、認証を有効にしてJava MongoDBドライバに接続する方法を説明します。

1. MongoDBをセキュアモードで起動する

MongoDBを `–auth`オプションで起動すると、MongoDBはデータベース/コレクション操作を実行するためにユーザー名とパスワードを必要とします。

mongod --auth

後で、データベース “testdb”に接続する必要があるため、後でテストするためにユーザーを追加してください。

> use admin
> db.addUser("admin","password")
> use testdb
> db.addUser("mkyong","password")

MongoDB認証を有効にするには、特別な “admin”データベースにユーザを追加する必要があります。詳しくは、//mongodb/mongodb-authentication-example/[MongoDB認証の例]を参照してください。

2. Java MongoDB認証の例

MongoDBがセキュアモードで起動されている場合、以下の「挿入」操作は有効でなくなり、「ログインが必要です」というエラーメッセージが表示されます。

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

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

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

com.mongodb.CommandResult$CommandFailure: command failed[getlasterror]:
    { "serverUsed" : "localhost/127.0.0.1:27017" , "errmsg" : "need to login" , "ok" : 0.0}

    at com.mongodb.CommandResult.getException(CommandResult.java:88)
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:134)
    at com.mongodb.DBTCPConnector.__checkWriteError(DBTCPConnector.java:142)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:183)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:155)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:270)
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:226)
    at com.mongodb.DBCollection.insert(DBCollection.java:75)
    at com.mongodb.DBCollection.insert(DBCollection.java:59)
    at com.mongodb.DBCollection.insert(DBCollection.java:104)
    at com.mkyong.core.App.main(App.java:40)

さて、 `db.authenticate()`を使用して認証を実行すると、true =成功、false =失敗の戻り値が返されます。

package com.mkyong.core;

import java.net.UnknownHostException;
import java.util.Date;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
/** **
 **  Java + MongoDB in Secure Mode
 **
 ** /public class JavaMongoDBAuthExample {
   public static void main(String[]args) {

    try {

    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!");
    }
    System.out.println("Done");

    } catch (UnknownHostException e) {
    e.printStackTrace();
    } catch (MongoException e) {
    e.printStackTrace();
    }
  }
}

参考文献

  1. リンク://mongodb/java-authentication-access-to-mongodb/[Java MongoDB

認証の例]。

https://jira.mongodb.org/browse/JAVA-45

[JIRA – DB.authenticate()

パスワードにchar[]を使用する必要があります]。

http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#authentication-optional

[MongoDB

セキュリティの実践と管理]

リンク://タグ/認証/[認証]リンク://タグ/mongodb/[mongodb]