Вопрос

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

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

Бег без auth дает ожидаемый результат — он запускается со следующим выводом:

Thu Dec 10 21:14:24 Mongo DB : starting : pid = 9350 port = 27017 dbpath = /var/mongodb_data master = 0 slave = 0  64-bit 
Thu Dec 10 21:14:24 db version v1.3.0-, pdfile version 4.5
Thu Dec 10 21:14:24 git version: 32d56f6d81a98b569103149c9ffea9f25a1ece81
Thu Dec 10 21:14:24 sys info: Darwin erh2.10gen.cc 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_37
Thu Dec 10 21:14:24 waiting for connections on port 27017

Тем не менее, бег с аутентификация (с использованием методов, директивы arg или config) дает следующий вывод, и процесс немедленно завершается:

Thu Dec 10 21:15:37 Mongo DB : starting : pid = 9361 port = 27017 dbpath = /var/mongodb_data master = 0 slave = 0  64-bit 
Thu Dec 10 21:15:37 User Exception unauthorized
Thu Dec 10 21:15:37  local.system.namespaces  Caught Assertion in runQuery ns:local.system.namespaces userassert:unauthorized
Thu Dec 10 21:15:37   ntoskip:0 ntoreturn:0
Thu Dec 10 21:15:37   query:{ name: /^local.temp./ }
Thu Dec 10 21:15:37 query local.system.namespaces ntoreturn:0 exception  0ms
Thu Dec 10 21:15:37 Dropping old temporary collection: 
Thu Dec 10 21:15:37 User Exception no collection name
Thu Dec 10 21:15:37   exception in initAndListen std::exception: no collection name, terminating
Thu Dec 10 21:15:37  dbexit: 
Thu Dec 10 21:15:37   shutdown: going to flush oplog...
Thu Dec 10 21:15:37   shutdown: going to close sockets...
Thu Dec 10 21:15:37   shutdown: waiting for fs...
Thu Dec 10 21:15:37   shutdown: closing all files...
Thu Dec 10 21:15:37      closeAllFiles() finished
Thu Dec 10 21:15:37   shutdown: removing fs lock...
Thu Dec 10 21:15:37  dbexit: really exiting now
ERROR: Client::shutdown not called!

Как отмечено в тегах, он работает на OS X Snow Leopard и использует последнюю ночную загрузку 64-битного двоичного файла OS X 1.3.x (может быть, мне следует вернуться к стабильной версии 1.2?)

Есть идеи, что является причиной этого и что я могу сделать, чтобы решить эту проблему?На моей локальной машине это не так важно, но мне нужно, чтобы он работал в безопасном режиме, чтобы его можно было вообще использовать в производстве.


ПС:если это должно быть на ServerFault, а не на SO, не стесняйтесь переместить его туда.Я не был уверен, какая среда подходит мне лучше всего.


Обновлять:

Я пробовал работать без аутентификации, добавляя пользователя и повторно запуская аутентификацию, как рекомендовали Мдирольф и Матиас.Однако он все еще выдает ту же ошибку.Пользователь был добавлен следующим образом:

Mark@Destiny mongodb$ sudo bin/mongo
MongoDB shell version: 1.3.0-
url: test
connecting to: test
type "help" for help
> use admin
switched to db admin
> db.addUser("Mark", "my-password-went-here")   
{ "user" : "Mark", "pwd" : "9934...be15da0" }
> db.system.users.find()
{ "_id" : ObjectId("4b216ed0be8a0b185767654e"), "user" : "Mark", "pwd" : "9934a190b...babe15da0" }
> exit
bye

Последующий запуск без аутентификации и вход в оболочку mongo доказывает, что пользователь действительно все еще здесь.Я делаю что-то глупое?

Это было полезно?

Решение

Ааа, похоже, вы нашли ошибку в мастере.Я создал для этого случай: http://jira.mongodb.org/browse/SERVER-474.

Пожалуйста, попробуйте недавно выпущенную версию mongodb 1.2.0.Git master (ветвь 1.3.x) нет уже готов к использованию.

Другие советы

Прежде чем запускать сервер с --auth, у вас уже должен быть пользователь в базе данных администратора.Я просто добавил примечание к документации, чтобы упомянуть об этом, чтобы никто больше не удивился.

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

Вам необходимо добавить пользователя, прежде чем начинать с --auth.Начните без --auth и добавьте пользователя, затем перезапустите с --auth.

Раздел безопасности был обновлен, чтобы описать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top