Значит, что-то где-то неправильно сконфигурено:
Попробуем ещё раз. Я предполагаю, что у Вас установлен сервер версии 2.4.x:
# Запускаем свежий сервер для тестирования, включаем auth, выключаем "localhost exception", чтобы можно было тестировать на одной и той же машине
$ mkdir /data/test
$ mongod --port 12345 --dbpath /data/test --auth --setParameter enableLocalhostAuthBypass=0
# Подсоединяемся
$ mongo --port 12345
MongoDB shell version: 2.4.6
// Пробуем
> db.eval("db.foo.insert({ bar: 1 })");
Fri Apr 4 14:46:38.688 { "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/db.js:571
// Ага, не работает
> exit
# Пробуем снова, запускаемся без --auth, создаем юзера:
$ mongod --port 12345 --dbpath /data/test
$ mongo --port 12345
> use admin
> db.addUser({ user: "admin", pwd: "foobar1234", roles: [ "readWriteAnyDatabase", "dbAdminAnyDatabase", "userAdminAnyDatabase", "clusterAdmin" ] });
> db.system.users.count()
1
// Ок, юзер создан
> exit
# Перезапускаемся обратно с --auth
$ mongod --port 12345 --dbpath /data/test --auth --setParameter enableLocalhostAuthBypass=0
# Подключаемся
$ mongo --port 12345
MongoDB shell version: 2.4.6
connecting to: 127.0.0.1:12345/test
> db.eval("db.foo.insert({ bar: 1 })")
Fri Apr 4 14:49:46.356 { "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/db.js:571
// Ага, опять не работает. Теперь скажем пароль, предварительно перейдя в бд "admin":
> use admin
> db.auth('admin', 'foobar1234')
1
// идем обратно в test
> use test
> db.eval("db.foo.insert({ bar: 1 })")
null
> db.foo.find()
{ "_id" : ObjectId("533efdcef55b2b5522a75eec"), "bar" : 1 }
// Ура, работает.
> exit
# NB: Можно сразу передать параметры --username и --password команде "mongo", в таком случае следует указать название бд "admin" в командной строчке:
$ mongo --port 12345 --username admin --password foobar1234 admin
> use test
> db.eval("db.foo.insert({ bar: 2 })")
null
> db.foo.find()
Теперь всё должно также работать из-под PHP драйвера.
Формат URI для MongoClient mongodb://admin:foobar1234@localhost опускает название базы данных, поэтому распознание пользователя происходит по бд "admin" по умолчанию, что и требуется.
Ещё раз повторюсь, важный момент: для работы с командой eval требуется распознание пользователя с привилегиями "readWriteAnyDatabase", "dbAdminAnyDatabase", "userAdminAnyDatabase", "clusterAdmin" в базе данных "admin".
--
Vladimir Mukhin @ MongoDB
On Friday, April 4, 2014 at 2:04 PM, prog45 wrote:
так тоже не работает