поставьте мое программное обеспечение с безопасным mongodb

1

поэтому у меня есть комплектное программное обеспечение, которое клиент может загрузить и установить (используя msi на win-машинах).
частью этого программного обеспечения является база данных mongoDB, которая хранит информацию о клиенте, конфигурации и т.д.

Когда программное обеспечение впервые установлено, оно создает пустую папку для mongoDB, и всякий раз, когда запускается программное обеспечение, он запускает процесс mongod (используя С# Process.Start()): mongod.exe --dbpath <path> --port <port> --quiet.

Моя цель - обеспечить базу данных mongoDB с именем пользователя/паролем, которое будет известно только моему приложению.

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

Итак, мои вопросы:
1. Как это сделать программно? Я думаю, это правильное направление, но я не мог найти много информации о документах С# driver
2. Как я могу заниматься обновлениями? т.е. клиенты, которые установили предыдущую версию программного обеспечения, где база данных вообще не защищена; В этом случае я хотел бы создать пользователя с паролем. 3. Как сохранить учетные данные пользователя приложения в приложении? в файле конфигурации? но это может быть прочитано клиентом. какие-нибудь лучшие практики здесь?

версии info- (к сожалению, из-за проблем с моей компанией мы не используем новейшие версии продуктов); mongoDB 2.6, драйвер mongoDB для.net 1.5.0.

благодарю!

PS Я прочитал раздел безопасности на веб-сайте mongoDB, но не смог найти простой пример для варианта использования, который я пытаюсь реализовать. Возможно, я просто пропустил что-то простое здесь.

Теги:

2 ответа

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

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

Прежде всего, я хочу убедиться, что вы знаете о последствиях лицензирования/авторских прав на объединение MongoDB с вашим программным обеспечением. Вы должны проверить лицензионный раздел страницы GongHub проекта mongo и ознакомиться с AGPL.

Во-вторых, самая простая часть вашего вопроса:

как сохранить учетные данные пользователя приложения в приложении? в файле конфигурации? но это может быть прочитано клиентом. какие-нибудь лучшие практики здесь?

Это выходит за рамки MongoDB. Если пользователь владеет системой, в которой работает процесс mongod, они могут просто скопировать файлы данных и настроить no-auth mongod поверх ваших данных приложения. Вы не можете разумно остановить их от подобных действий, поэтому не рассчитывайте, что ваши данные приложений будут защищены от пользователя клиента. Кроме того, если вы устанавливаете свой код приложения локально, любой разумно умный и преданный человек должен иметь возможность извлекать имя пользователя и пароль из скомпилированного кода приложения. Вы можете сделать это трудно, но не невозможно.

В третьих,

Как я программно это делаю?

Основываясь на том, что я только что сказал, я беру "это", чтобы означать

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

а не в том, чтобы быть уверенным в том, что он будет защищен от лица, которому принадлежит компьютер, на котором он установлен, потому что это невозможно. Чтобы сделать это, я бы либо упаковал файл мини-данных, чтобы запустить mongod сверху, тот, который включал уже настроенные пользователи, или включал дамп, который вы используете что-то вроде mongorestore для загрузки в mongod после его запуска. Первый вариант проще реализовать, и не должен требовать, чтобы вам нужно было снять и возродить процесс mongod, поэтому попробуйте это - посмотрите, можете ли вы настроить mongod с помощью auth, как вы этого хотите, а затем перетащить информацию о пользователе, скопировав данные файлы. FWIW, я уверен, что пароли не хранятся в текстовом виде в файлах данных (они соленые), поэтому у вас не будет того, что непосредственно отображается из файлов данных.

В заключение,

Как я могу справиться с обновлениями?

Вам нужно будет удалить свой mongod, перезапустить его с помощью auth, использовать исключение localhost для создания нужных вам пользователей, отключить исключение localhost (необязательно, но почему бы и нет), а затем завершить это соединение и запустить новые, используя auth. Это тот же процесс, что и в руководствах по безопасности, вам просто нужно сделать это с помощью команд драйвера С#. Обратите внимание, что перемещение между версиями MongoDB также сложно, поскольку модель безопасности улучшилась с течением времени, поэтому вам следует проконсультироваться с руководством по обновлению для дополнительных действий, чтобы убедиться, что схема пользователя обновлена правильно, если вы перемещаете пользователя с безопасного 2.6 на защитите 3.0, скажем.

  • 0
    спасибо, действительно, я знаю, что вы не можете заблокировать кого-то от просмотра данных, которые хранятся локально на их компьютере, но я хочу сделать это немного сложным для них. о создании пользователя с использованием предварительно сконфигурированного файла данных, чтобы начать с очень хороших звуков, но он будет работать только для новых установок; Обновления должны быть выполнены так, как вы описали позже. так как мне все равно придется делать процесс создания пользователя для существующей базы данных, я думаю, что я мог бы также не беспокоиться о файле данных, а скорее написать небольшой фрагмент кода, который запускается после установки и создает пользователей, если не найден
0

С# connectionString может принимать учетные данные для базы данных. MongoDB://имя пользователя: PWD @сервер: порт/имя_бд

для ex mongodb://myuser: mypassword @mydbserver: 30254/mydb

Лучший способ - хранить данные в файле конфигурации. Если вы беспокоитесь об экспонировании, его можно зашифровать и сохранить. Другой менее вероятный вариант - хранить в файле ресурсов и ссылаться на него как на строку.

  • 0
    спасибо, но мой вопрос был не только о том, как подключиться к защищенной базе данных; речь шла о программном обеспечении безопасности, и лучший способ сделать это

Ещё вопросы

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