我在ubuntu堆栈中安装了php7 + mongodb 3.2:
pecl install mongodb(这是> 5.99.99
)的新驱动程序
我还使用最后一个php包mongodb/mongodb作为包装。
但我在验证用户方面遇到了问题。
new \MongoDB\Client('mongodb://root:123456@somehost:27017');
由于身份验证机制失败,驱动程序正在尝试进行身份验证MONGODB-CR
(已弃用于> 3.0)而不是SCRAM-SHA-1
当然,身份验证适用于shell mongo客户端:
mongo someip:27017/admin -u root -p "123456"
问题是,如何在php驱动程序中指定身份验证机制? (\MongoDB\Client
构造函数接受一些数组$driverOptions = []
),是否有指定它的选项?
谢谢!
答案 0 :(得分:2)
确保您使用的是最新的驱动程序。由于新默认值应为SCRAM-SHA-1。
我在环境下运行了测试:php7,ubuntu14,MongoDB v3.2.x,mongo-php-library =^1.0.0和mongodb php driver v1.1.5。哪个按预期工作。
require_once __DIR__ . "/vendor/autoload.php";
$client = new MongoDB\Client("mongodb://user:pwd@host:port/admin");
$collection = $client->selectCollection("databaseName", "collection");
$cursor = $collection->find();
foreach ($cursor as $document) { var_dump($document); }
我还在URI中测试了authMechanism选项,例如:
$client = new MongoDB\Client("mongodb://user:pwd@host:port/admin?authMechanism=SCRAM-SHA-1");
哪个也有效,但如果您使用的是新的PHP驱动程序,则不需要指定SCRAM-SHA-1。如果你运行php --ri mongodb
,你应该会看到类似的东西(对于v1.1.5):
mongodb
mongodb support => enabled
mongodb version => 1.1.5
mongodb stability => stable
libmongoc version => 1.3.3
libbson version => 1.3.3