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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:40:13