无法使用 PHP 在 mongodb 上进行身份验证

Can't authenticate on mongodb with PHP

我做了什么:

/etc/mongod.conf 中启用身份验证:

auth = true

doc 中所述,从 shell 创建第一个用户:

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

使用 admin 用户,我创建了一个 root 用户来访问 mongodb:

db.createUser(
{
    user: "root",
    pwd: "root",
    roles: [ "root" ]
})

到目前为止一切正常,因为我可以从 mongo shell 进行身份验证:

mongo --port 27017 -u root -p root  admin

它工作得很好,因为我可以在数据库中进行所有操作。

问题

当我尝试使用相同的 root 用户从 PHP 进行身份验证时:

$client = new MongoClient("mongodb://root:root@localhost:27017/admin");

它给出了错误:

Failed to connect to: localhost:27017: Authentication failed on database 'admin' with username 'root': auth failed

为什么不能 PHP 在 mongodb 上进行身份验证,如果使用相同的凭据在 mongo shell 上可以正常进行身份验证?

其他说明:

问题已解决:显然是由 PHP mongo 驱动程序版本 1.4

中的 problem/bug 引起的

我已将驱动程序升级到 1.6 版本:

pecl upgrade mongo

现在身份验证有效。

我遇到了同样的问题,在我的例子中,我使用 apt-get

安装了 mongo
apt-get install php5-mongo

似乎 Ubuntu 存储库仍然是 1.4 版本并且还没有更新包。 如果你想在 Ubuntu 上安装 mongo,你应该使用 pecl 选项

pecl install mongo

切勿使用 apt-get 为 php 安装 mongo。