Что я наделал:
Включенная аутентификация в /etc/mongod.conf
:
auth = true
Создал первого пользователя из оболочки, как указано в документе :
db.createUser( { user: "admin", pwd: "admin", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
Используя пользователя admin
, я создал пользователя root
для доступа к mongodb:
db.createUser( { user: "root", pwd: "root", roles: [ "root" ] })
До этого момента все работает нормально, так как я могу аутентифицироваться из оболочки монго с:
mongo --port 27017 -u root -p root admin
и он отлично работает, так как я могу выполнять все операции в db.
Проблема :
когда я пытаюсь выполнить аутентификацию с PHP с помощью одного и того же пользователя root
:
$client = new MongoClient("mongodb://root:root@localhost:27017/admin");
Это дает ошибку:
Не удалось подключиться к: localhost: 27017: Ошибка аутентификации в базе данных «admin» с именем пользователя «root»: auth failed
Почему PHP не может аутентифицироваться на mongodb, если аутентификация с использованием тех же учетных данных отлично работает с оболочкой mongo?
Другие примечания:
Проблема решена: это было вызвано проблемой / ошибкой в PHP mongo версии 1.4
Я обновил драйвер до версии 1.6
с помощью:
pecl upgrade mongo
и теперь аутентификация работает.
У меня была та же проблема, в моем случае я установил mongo, используя apt-get
apt-get install php5-mongo
И похоже, что хранилища Ubuntu по-прежнему остаются версией 1.4 и еще не обновили пакет. Если вы хотите установить mongo на Ubuntu, вы должны использовать опцию pecl
pecl install mongo
Никогда не используйте apt-get
для установки mongo для php.
в соответствии с инструкциями по установке mongo в версиях Windows mongo.dll необходимо скопировать в системный путь, например c: \ windows. Я тестировал это и да, он работает.