远程 Mysql 服务器上的 Laravel 权限被拒绝(AWS aurora)

Posted

技术标签:

【中文标题】远程 Mysql 服务器上的 Laravel 权限被拒绝(AWS aurora)【英文标题】:Laravel permission denied on remote Mysql server (AWS aurora) 【发布时间】:2017-08-13 18:10:25 【问题描述】:

我有一个带有 Laravel 应用程序的 centos EC2。我还在同一个 EC2 实例上安装了 mysql。它工作正常。

现在我决定将 MYSQL 迁移到 AWS RDS (MySQL Aurora)。我可以通过Heidi连接AWS RDS,查询没有问题。

但是在 Laravel 中它会抛出异常。 我更改了 DB_HOST、DB_DATABASE、DB_USERNAME、DB_PASSWORD 的 .env 文件凭据。

有关例外情况,请参见下文:

1/3 PDOException in PDOConnection.php line 43:
SQLSTATE[HY000] [2002] Permission denied
1. in PDOConnection.php line 43
2. at PDO->__construct('mysql:host=correct_host;port=3306;dbname=correct_db', 'correct_username', 'correct_password', array('0', '2', '0', false, false)) in PDOConnection.php line 43

1/2 PDOException in PDOConnection.php line 47:
SQLSTATE[HY000] [2002] Permission denied

1/3 QueryException in Connection.php line 770:
SQLSTATE[HY000] [2002] Permission denied (SQL: select * from `users` where `users`.`id` = 1 limit 1)

更新

我刚刚将 .env 中的数据库凭据还原为我的旧 MySQL(安装在与 Laravel 应用程序相同的 EC2 实例上)。 它与 DB_HOST=localhost 一起使用,但如果我使用实际 ip,DB_HOST=127.0.0.1,它会抛出相同的异常。

【问题讨论】:

在您的 MySQL 实例中,您是否正确设置了 Laravel 使用的用户设置?还要验证用户的主机以及可能就是这样。 @user3158900 请查看我更新的异常日志。我可以在错误堆栈中看到主机、数据库、用户名和密码,它们是正确的。它可能需要对来自 laravel 的远程连接做些什么吗? 【参考方案1】:

如果您在 centos EC2 上运行 SELinux,请尝试关闭 SELinux 并再次测试您的应用程序。如果是 SELinux 导致了这个问题,很可能是因为外部连接到数据库的策略。您应该重新打开 SELinux 并使用此命令启用策略。

sudo setsebool -P httpd_can_network_connect_db=1

【讨论】:

你拯救了我的一天!谢谢。【参考方案2】:

像这样编辑 /etc/my.cnt:

bind-address = 0.0.0.0 # will accept requests from all IPs

然后在你的mysql中添加一个用户并给他适当的权限

grant all privileges on db_name.* to 'username'@'%' identified by 'password';

这使用户可以从任何 IP 连接到数据库

grant all privileges on db_name.* to 'username'@'your_ip' identified by 'password';

这使用户可以仅从一个 IP 连接到数据库。这是最佳做法,您不想允许来自任何 IP 的连接,这是一种糟糕的安全做法。

这将使您能够从外部 IP 连接到数据库

为什么您的 RDB 实例不工作尚不清楚,您是否启用了远程连接?

【讨论】:

嗨,除了第一部分,我已经完成了所有部分。我的 aws rds 正在接受连接。我正在使用 Heidi(MySQL Windows 客户端应用程序)并且工作正常。它看起来像它的laravel问题。 Laravel 不接受除 localhost 以外的任何其他连接,甚至不接受 127.0.0.1。 你能把select user,host from mysql.user;show grants for 'root'@'%'; 的输出和你的“config/database.php”贴出来吗?这是一种奇怪的行为。 9/10 它与数据库权限和 mysql 未在 127.0.0.1 上侦听有关,我认为,但我可能是错的,laravel 在通过 localhost 连接时尝试通过 mysql 套接字进行连接。

以上是关于远程 Mysql 服务器上的 Laravel 权限被拒绝(AWS aurora)的主要内容,如果未能解决你的问题,请参考以下文章

解决MySQL远程连接服务器上的MySQL报1130的错问题

连接内网服务器上的mysql报错

无法远程连接mysql,连接后也没有权限创建数据库

mysql给root开启远程访问权限,修改root密码

mysql给root开启远程访问权限,修改root密码(转)

mysql 登录权限