MongoDB: как создать аутентифицированную базу данных с помощью драйвера Java

1

Я пытаюсь создать базу данных аутентификации в MongoDB 2.6 с помощью java-драйвера v 2.12. В частности, мне нужно создать пользователя, получающего доступ к коллекции admin. Любое предложение? Благодарю.

Теги:

2 ответа

1
Лучший ответ

Здесь мое решение:

MongoClient mcAdmin = new MongoClient(
            configuration.getServerAddresses(),
            Arrays.asList(MongoCredential.createMongoCRCredential(
                    MONGODB_ADMIN_USERNAME, "admin",
                    MONGODB_ADMIN_PASSWORD.toCharArray())));
    try {
        mcAdmin.setWriteConcern(WriteConcern.JOURNALED);
        DB db = mcAdmin.getDB(userDbName);
        BasicDBObject commandArguments = new BasicDBObject();
        commandArguments.put("user", userUsername);
        commandArguments.put("pwd", userPassword);
        String[] roles = { "readWrite" };
        commandArguments.put("roles", roles);
        BasicDBObject command = new BasicDBObject("createUser",
                commandArguments);
        db.command(command);
    } finally {
        mcAdmin.close();
    }
0

Выполнение этого в Java-коде не самый лучший способ сделать это, и за исключением очень редких случаев использования (написания приложения администратора для MongoDB) даже один я бы настоятельно советовал.

Риск безопасности

Прежде всего, вашему приложению потребуются чрезвычайно высокие привилегии, а именно userAdminAnyDatabase или userAdmin в базе данных admin, которая более или менее предоставляет те же права: создание суперпользователя по своему userAdmin. Другими словами: этот код будет представлять собой высокий риск для безопасности.

Предоставление ролей и прав в базе данных является административной задачей и по уважительным причинам должно быть отделено от приложения, доступного произвольным пользователям.

Технические проблемы

Активация аутентификации от клиента просто невозможна. Экзамен mongod должен быть запущен с включенной аутентификацией. Кроме того, вам нужно будет сохранить, чтобы создать пользователя с указанными ролями, прежде чем вы сможете управлять своим приложением. Проблема: вам нужно будет где-то хранить пароль для этого пользователя. Если вы его не зашифруете, вы в основном храните самый мощный пароль для своих баз данных и кластера MongoDB в открытом виде. И если вы зашифруете его, вы должны передать ключ для дешифрования в свое приложение в какой-то момент безопасным образом. И все это, чтобы разбить лучшие практики ("Разделение забот")?

  • 0
    Код, который я дал, является частью административного интерфейса, в частности Java-приложения. Доступ к интерфейсу администрирования защищен по протоколу https с включенной аутентификацией на стороне клиента ssl (вход по смарт-карте). Пользователь и пароль администратора mongoDB нигде не хранятся, запрашивается пользователю, когда он активирует процедуру создания базы данных. Вы все еще не одобряете это решение? В конце концов, можете ли вы предложить лучшее решение (если предположить, что пользователь, который создает базу данных, не может иметь прямой доступ к mongoDb через командную строку)?
  • 0
    MMS, новая версия. Пользователь admin включен. Меньше работы, уже в рабочем состоянии, на предпосылке доступны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню