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

PHP/Laravel应用EC2到AWS RDS MariaDB连接权限问题排查

Laravel应用EC2部署连接RDS MariaDB权限异常排查

问题场景

部署在AWS EC2的PHP/Laravel应用,通过.env配置AWS托管的RDS MariaDB实例后,执行数据库查询时抛出权限错误:

SQLSTATE[HY000] [2002] Permission denied (SQL: select * from users where id = 1234567 limit 1)

已完成的前置验证(全部通过):

  • EC2主机通过Telnet成功连通RDS实例
  • 在EC2主机执行命令 mysql -h your-db-instance.x12345abcde.region.rds.amazonaws.com -u your_username -P 3307,可正常连接数据库并执行查询
  • 确认.env文件权限配置符合要求,应用进程可读取

针对性解决方案

1. 核对Laravel数据库端口配置

手动连接时指定了3307端口,但需确认.env中的DB_PORT是否设置为3307——Laravel默认使用3306端口,若RDS实例端口为3307,配置不匹配会直接导致连接失败。

2. 确认RDS数据库用户授权范围

检查RDS数据库用户的授权规则,确保其允许当前EC2主机的IP(或所有IP)访问目标数据库:
执行以下SQL语句查看权限:

SHOW GRANTS FOR 'your_username'@'%';

若权限不足,执行授权语句(替换占位符):

GRANT ALL PRIVILEGES ON your_target_database.* TO 'your_username'@'%';
FLUSH PRIVILEGES;

3. 排查SELinux限制

若EC2主机开启了SELinux,可能会阻止PHP/FPM进程发起网络连接:

  • 临时关闭SELinux测试:
    setenforce 0
    
  • 若测试有效,永久开启HTTPD数据库连接权限:
    setsebool -P httpd_can_network_connect_db 1
    

4. 清理Laravel配置缓存

如果之前执行过php artisan config:cache,修改.env后必须清除缓存,否则应用会使用旧的配置参数:

php artisan config:clear
php artisan cache:clear

5. 明确数据库连接端口配置

在config/database.php中直接指定数据库端口,避免依赖环境变量解析异常:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3307'), // 显式指定端口
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    // 保留其他原有配置
],

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:02:38