【问题标题】:MongoDB PHP Driver Fails to Connect and AuthenticateMongoDB PHP 驱动程序无法连接和验证
【发布时间】:2023-04-06 18:24:02
【问题描述】:

我第一次为 MongoDB 设置了身份验证。我有两个用户:“admin”(在“admin”数据库中设置为 root)和“testUser”,在“testDatabase”中设置为“dbAdmin”。

当我使用 mongo shell 使用以下命令登录时,一切正常:

mongo -u testUser -p abcd1234 --authenticationDatabase testDatabase

在 PHP 端,我有以下代码:

<?php
class DBConnection {
    const HOST = '1.1.1.1';
    const PORT = 27017;
    const DBNAME = 'testDatabase';
    const USERNAME = 'testUser';
    const PASSWORD = 'abcd1234';
    private static $instance;
    public $connection;
    public $database;

    private function __construct() {

        if (!extension_loaded('mongo')) die("MongoDB is not installed!");
        try {
            $this->connection = new MongoClient('mongodb://'.self::HOST.':'.self::PORT.'/'.self::DBNAME, array('username' => self::USERNAME, 'password' => self::PASSWORD));
            $this->database = $this->connection->selectDB(self::DBNAME);
        } catch (MongoConnectionException $e) {
            throw $e;
        }
    }

    static public function instantiate() {
        if (!isset(self::$instance)) {
            $class = __CLASS__;
            self:: $instance = new $class;
        }
        return self::$instance;
    }

    public function getCollection($name) {
        return $this->database->selectCollection($name);
    }

    public function execute($code) {
        return $this->database->execute($code);
    }
}
?>

当然,主机(以及数据库名称、用户名和密码)都会被混淆。我已多次验证凭据中没有错字。我还验证了我可以从远程 shell 连接到数据库,类似于此脚本的连接方式。

不过,我总是收到此错误:

PHP 致命错误:未捕获的异常“MongoConnectionException”与 消息'无法连接到:1.1.1.1:27017:身份验证 在用户名“testUser”的数据库“testDatabase”上失败:身份验证失败 /var/www/html/wip/include/mongoConnect.php:17 堆栈跟踪: 0 /var/www/html/wip/include/mongoConnect.php(17): MongoClient->__construct('mongodb://1.1...', 数组) 1 /var/www/html/wip/include/mongoConnect.php(27): DBConnection->__construct() 2 /var/www/html/wip/migration/migrate.php(85): DBConnection::instantiate() 3 {main} 在第 17 行的 /var/www/html/wip/include/mongoConnect.php 中抛出

两个用户的凭据都在 SCRAM-SHA-1 中。 知道是什么导致了这个连接问题吗?

【问题讨论】:

  • 正如我所指出的,出于安全考虑,我删除了真实的 HOST IP 地址。脚本中实际的HOST IP指向一个真实的IP地址

标签: php mongodb


【解决方案1】:

你可以尝试改变登录方式

$m = new MongoClient("mongodb://${username}:${password}@localhost");

看看这里:
http://php.net/manual/en/mongo.connecting.auth.php

【讨论】:

    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2015-06-02
    • 2016-07-13
    • 2017-02-25
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多