Symfony 7 Docker环境下SSL连接MariaDB遭权限拒绝问题
解决Symfony 7(PHP 8.3)Docker环境下MariaDB SSL连接权限拒绝问题
以下是针对问题的分步排查和修复方案:
1. 验证Doctrine SSL配置是否适配Symfony 7
Symfony 7对应Doctrine Bundle版本可能对SSL参数处理有变化,需确保配置项准确:
- 检查
.env中的DATABASE_URL是否包含完整SSL参数:DATABASE_URL="mysql://app_ssl:your_password@mariadb:3306/your_db?sslmode=required&sslrootcert=%kernel.project_dir%/config/ssl/ca.pem&sslcert=%kernel.project_dir%/config/ssl/client-cert.pem&sslkey=%kernel.project_dir%/config/ssl/client-key.pem" - 若通过
config/packages/doctrine.yaml配置,显式添加PDO SSL选项避免自动解析遗漏:doctrine: dbal: url: '%env(resolve:DATABASE_URL)%' options: PDO::MYSQL_ATTR_SSL_CA: '%kernel.project_dir%/config/ssl/ca.pem' PDO::MYSQL_ATTR_SSL_CERT: '%kernel.project_dir%/config/ssl/client-cert.pem' PDO::MYSQL_ATTR_SSL_KEY: '%kernel.project_dir%/config/ssl/client-key.pem' PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT: false # 自签名证书可临时关闭验证排查
2. 检查PHP 8.3的MySQL扩展SSL支持
PHP 8.3的pdo_mysql/mysqli扩展默认SSL参数可能有变更:
- 在Symfony容器内执行命令验证扩展状态:
# 确认扩展已启用 php -m | grep -E 'pdo_mysql|mysqli' # 查看SSL相关配置 php -i | grep -A 10 'mysql.ssl' - 确保PHP容器内证书文件权限正确(需
www-data用户可读取):chown www-data:www-data /path/to/your/ssl/certs/* chmod 644 /path/to/your/ssl/certs/*
3. 重新确认MariaDB用户权限配置
即使之前配置过REQUIRE SSL,仍需验证权限匹配当前连接场景:
- 登录MariaDB容器执行以下命令:
# 查看用户SSL要求及主机匹配规则 SELECT User, Host, ssl_type, auth_plugin FROM mysql.user WHERE User='app_ssl'; # 确认用户权限包含SSL要求 SHOW GRANTS FOR 'app_ssl'@'%'; -- 替换为实际主机范围,比如'172.27.0.%' - 若用户使用
caching_sha2_password认证插件,切换为mysql_native_password(PHP对该插件的SSL兼容性可能存在问题):ALTER USER 'app_ssl'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
4. 直接测试容器间SSL连接(排除Symfony/Doctrine干扰)
在Symfony容器内使用mysql客户端直接连接MariaDB,验证基础SSL连接是否正常:
mysql -u app_ssl -p -h mariadb --ssl-ca=/path/to/ca.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem your_db
- 若此连接成功,问题出在Symfony/Doctrine配置;若失败,检查MariaDB的SSL启用状态:
确保SHOW VARIABLES LIKE '%ssl%';have_ssl值为YES,且证书路径与MariaDB配置一致。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

