从PHP连接时拒绝MariaDB访问

rur96b6h  于 7个月前  发布在  PHP
关注(0)|答案(1)|浏览(83)

我在服务器上安装了MariaDB,监听0.0.0.0:3306,并配置为接受来自mysql.mydomain.com的连接。它还使用Let's Encrypt生成的SSL证书。用户名为test,密码设置为123。我可以成功地连接到它使用mariadb实用程序从我的电脑(不是服务器)使用以下命令:

mariadb -u test -h mysql.mydomain.com -P 3306 --password=123

但是当我尝试用PHP连接到它时(运行在与我上面命令相同的PC上),我得到了拒绝访问错误:
PHP致命错误:未捕获的mysqli_sql_exception:用户“test '@”(My IP Address)“访问被拒绝(使用密码:是)
PHP代码:

$host = "mysql.mydomain.com";
$username = "test";
$password = "123";
$database = "test";
$port = 3306;
                
$mysqli = @new mysqli($host, $username, $password, $database);
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

我还尝试禁用密码的“测试”帐户。我又一次能够用mariadb命令登录,但不能用PHP。PHP-FPM已启用mysqli扩展。
编辑:好的,在更改mariadb日志配置后,我得到了这两条日志消息:

230826 18:10:24    900 Connect  test@My_Ip_Address on  using SSL/TLS
230826 18:11:38    908 Connect  test@My_Ip_Address on test using TCP/IP
                   908 Connect  Access denied for user 'test'@'My_Ip_Address' (using password: YES)

第一次成功连接是使用mariadb命令。第二,连接失败是因为PHP。看起来PHP正在获取我的域,解析它,并尝试使用加密连接(?).

lc8prwob

lc8prwob1#

服务器需要安全连接(设置require_secure_transport=1),或者用户test是使用必需的TLS选项创建的:需要SSL,需要X509(或不太可能的分包商或发行商)
默认情况下,mariadb命令行客户端尝试使用TLS进行连接

$> mariadb -uroot -e "SHOW STATUS LIKE 'ssl_cipher'"
+---------------+-----------------------------+
| Variable_name | Value                       |
+---------------+-----------------------------+
| Ssl_cipher    | ECDHE-RSA-AES256-GCM-SHA384 |
+---------------+-----------------------------+

由于PHP脚本根本不使用TLS/SSL,因此无法建立安全连接。

相关问题