You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP连接MariaDB提示Access denied问题求助

解决PHP连接MariaDB时的SSL权限拒绝问题

从你提供的MariaDB日志可以明确问题根源:

  • 命令行mariadb工具连接时使用了SSL/TLS,符合数据库的权限配置,所以成功
  • PHP的mysqli连接使用的是普通TCP/IP未加密连接,不符合用户权限要求,因此被拒绝

以下是具体解决步骤:

1. 在PHP mysqli连接中强制启用SSL

你需要显式告诉mysqli使用SSL连接,有两种实现方式:

方式一:通过连接选项启用SSL

修改你的PHP代码,在实例化mysqli时传入SSL启用选项:

$host = "mysql.mydomain.com";
$username = "test";
$password = "123";
$database = "test";
$port = 3306;

// 启用SSL的连接选项
$ssl_options = [
    MYSQLI_CLIENT_SSL => true,
    // 若你的MariaDB要求验证CA证书,需添加证书路径(根据实际路径调整)
    // MYSQLI_CLIENT_SSL_CA => '/etc/letsencrypt/live/mysql.mydomain.com/chain.pem'
];

$mysqli = @new mysqli($host, $username, $password, $database, $port, null, $ssl_options);
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

方式二:使用mysqli_ssl_set函数配置SSL

$host = "mysql.mydomain.com";
$username = "test";
$password = "123";
$database = "test";
$port = 3306;

$mysqli = mysqli_init();
// 配置SSL,前三个参数为客户端证书/密钥路径,若无需客户端验证可传null
mysqli_ssl_set($mysqli, null, null, '/etc/letsencrypt/live/mysql.mydomain.com/chain.pem', null, null);
$connection_success = $mysqli->real_connect($host, $username, $password, $database, $port);

if (!$connection_success) {
    die("Connection failed: " . $mysqli->connect_error);
}

2. 确认MariaDB用户权限配置

登录MariaDB服务器,执行以下命令检查test用户的权限规则:

SHOW GRANTS FOR 'test'@'%';

如果结果中包含REQUIRE SSL,说明该用户必须通过SSL连接才能访问数据库,这正是PHP非SSL连接被拒绝的核心原因。

3. 可选:全局启用PHP mysqli的SSL连接

如果你的所有PHP应用都需要连接该MariaDB,可以修改php.ini配置文件,设置全局默认启用SSL:

mysqli.default_ssl = 1

修改后重启PHP-FPM生效。

内容的提问来源于stack exchange,提问作者user16712485

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:54:49