【发布时间】: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地址