Я понимаю, как создать пользователя в MySQL, который будет использовать веб-приложение, - как я могу сделать то же самое в MongoDB?

mongodb web-applications connection-string

455 просмотра

1 ответ

Как ветеран веб-разработчик - я получаю строки подключения .

Я видел их в файлах WordPress wp-config.php, я видел их во многих файлах ASP.NET app.config. Я знаю, как войти в установку MySQL и создать имя пользователя @ и предоставить им все привилегии (или подмножество), чтобы веб-приложение могло затем использовать эти учетные данные для подключения.

Я знаю, как зайти в раздел «Безопасность» MS SQL Server и настроить интегрированного пользователя или пользователя только для входа в систему SQL и т. Д.

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

Когда я нахожусь в оболочке mongo, не существует ли блок JSON по умолчанию с хорошо известными ролями ... подходящий для веб-приложения, который я должен передать в вызов db.createUser ()? Я не могу найти это там, где я искал.


РЕДАКТИРОВАТЬ В дополнение к реализации красивого ответа Маркуса Малберга ниже - я обнаружил, что получаю ошибку аутентификации, которая требует этого исправления SO, перемещая версию аутентификации с 5 на 3, и это требует, чтобы я заново создал моего администратора с ролью: «root» прежде чем продолжить.

Автор: bkwdesign Источник Размещён: 14.10.2019 10:36

Ответы (1)


2 плюса

Решение

Введение

Хорошо, обо всем по порядку, это должно быть сказано.

MongoDB не является

  • более прохладный, новый и блестящий MySQL. Это отличается, в каждом главном аспекте
  • подходит для мышления по аналогии с продуктом X (даже couchdb). На самом деле, если вы это сделаете, это рано или поздно доставит вам неприятности.
  • быть принятым легко. Вам необходимо прочитать документацию. Тщательно. И снова.

Вы действительно должны перестать думать с точки зрения "Как я могу сделать X, как я сделал в технологии Y в технологии Z?"

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

Отказ от ответственности Изменение настроек безопасности может сделать ваш экземпляр и / или кластер недоступным. Действуйте с особой осторожностью и только в том случае, если вы абсолютно уверены, что поняли, что делаете.

Я предполагаю, что речь идет об отдельном экземпляре MongoDB или наборе реплик. Если у вас есть закрытый кластер, прекратите чтение и спросите своего администратора баз данных - или получите его.

Шаг 0: прочитайте документы по безопасности

В самом деле. Я серьезно. Судо читать документы! ;) Они хорошо написаны, основательны и полезны.

Вы должны понимать, что вы делаете, поэтому чтение документов - это шаг 0.

Шаг 1: Создайте пользователя с правами администратора

Чтобы ваш администратор был готов, когда вы включаете функцию аутентификации, вы должны сначала настроить ее.

  1. Подключитесь к вашему экземпляру mongodb
  2. Перейдите в adminбазу данных

    use admin
    
  3. Создать административного пользователя

    db.createUser({
        user: "funkyNameForUserAdminSinceThereIsNoConvention",
        pwd: "changeMePlease:Loremipsumdolorsitamet,consecteturt",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    })
    

Обратите внимание, что этот пользователь имеет право только управлять другими пользователями. У пользователя нет других разрешений. Если вам нужны другие разрешения: добавьте соответствующих пользователей с соответствующими ролями после завершения шага 4.

Шаг 2. Включите аутентификацию

Вероятно, наиболее спорная настройка по умолчанию в MongoDB заключается в том, что аутентификация по умолчанию не включена , что приводит к тому, что некоторые данные становятся доступными для общественности ... менее профессиональным людям .

Чтобы включить аутентификацию , вам необходимо соответствующим образом настроить свой экземпляр. Здесь возникает проблема: доступны два формата файлов конфигурации: устаревший формат и YAML . Вы можете узнать, какой из них использует ваша установка, и внести изменения в соответствии с приведенными ниже сведениями.

В традиционном формате

Добавьте строку

auth=true

на ваш mongod.conf

В формате YAML

Добавлять

security:
    authorization: enabled

к вашему mongod.conf(отступ имеет значение!).

Шаг 3: Перезапустите ваш экземпляр MongoDB

Не так много, чтобы сказать здесь, так как я не знаю вашу ОС, но я уверен, что вы знаете, как это сделать

Шаг 4: Создать учетную запись пользователя

В MongoDB любой пользователь может храниться в (почти) любой базе данных. Таким образом, пользователь с доступом к «foo» вполне может быть сохранен в базе данных «bar». Причина этого заключается в том, что хотя основная база данных пользователя может быть «bar», ему также может быть предоставлен доступ к базе данных «foo», и в этом случае нет необходимости дублировать записи пользователя. Пользователь, запрашивающий доступ к «foo», сделал бы это, установив флаг --authenticationDatabase для клиента оболочки:

mongo [host[:port]/]foo --authenticationDatabase bar -u funkyUser -p

Теперь мы делаем это с нашим вновь созданным пользователем-администратором:

mongo [host[:port]/]bar --authenticationDatabase admin \ 
-u funkyNameForUserAdminSinceThereIsNoConvention -p

Теперь мы должны быть в «bar» базы данных, для которой мы хотим создать пользователя с ролью readWrite для «foo» и «bar», как в примере выше.

db.createUser({
  user: "funkyUser",
  pwd: "changeMePlease:Loremipsumdolorsitamet,consecteturt",
  roles: [
    {role: "readWrite", db:"foo"},
    {role: "readWrite", db:"bar"}
  ]
})

Готово!

Теперь вы сможете войти в систему как «funkyUser», читать и изменять «foo» и «bar» в соответствии с потребностями веб-приложения.

Автор: Markus W Mahlberg Размещён: 22.01.2016 02:11
Вопросы из категории :
32x32