我在服务器上安装了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正在获取我的域,解析它,并尝试使用加密连接(?).
1条答案
按热度按时间lc8prwob1#
服务器需要安全连接(设置
require_secure_transport=1
),或者用户test
是使用必需的TLS选项创建的:需要SSL,需要X509(或不太可能的分包商或发行商)默认情况下,mariadb命令行客户端尝试使用TLS进行连接
由于PHP脚本根本不使用TLS/SSL,因此无法建立安全连接。