Mysql 数据库连接被拒绝
Posted
技术标签:
【中文标题】Mysql 数据库连接被拒绝【英文标题】:Mysql Database connection denied 【发布时间】:2017-11-03 02:51:17 【问题描述】:我正在尝试让我的 Symfony 3 应用程序在 Amazon EC2 实例上以生产模式运行。
我将代码放在正确的位置,然后我尝试通过运行来设置任何与 composer 的依赖关系
export SYMFONY_ENV=prod
composer install --no-dev --optimize-autoloader
但得到错误
> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installAssets
[Doctrine\DBAL\Exception\ConnectionException]
An exception occured in driverL SQLSTATE[HY000] [1044] Access denied for user 'my-user'@'127.0.0.1' to database 'my_database'
在脚本终止之前,此错误会传递给[Doctrine\DBAL\Driver\PDOException]
和[PDOException]
。
然后是消息
[RuntimeException]
An error occured when executing the "'assets:install --symlink --rela'\''web'\'''" command:
然后出现与开头相同的错误。
我的parameters.yml文件是
parameters:
database_host: 127.0.0.1
database_port: 3306
database_name: my_database
database_user: my-user
database_password: mypassword
server_version: 5.6
mailer_transport: smtp
mailer_host: 127.0.0.1
mailer_user: null
mailer_password: null
secret: Mysecret
registration_permitted: true
registration_limit: 3
并且用户my-user
拥有数据库my_database
上除GRANT 之外的所有权限。
我已经尝试解决这个问题几个小时无济于事,我遇到的其他解决方案涉及拼写错误的用户名/密码/数据库(三重检查)或需要添加服务器版本(这没有什么区别) .
其他信息
运行mysql -u my-user -p
提示输入密码,然后允许我登录。
运行mysql -u my-user -p -D my_database
提示输入密码,然后返回ERROR 1044 (42000): Access denied for user 'my-user'@'localhost' to database 'my_database'
。
以 root 身份登录 mysql 并运行 SHOW GRANTS FOR 'my-user';
返回 ERROR 1141 (42000): There is no such grant defined for user 'my-user' on host '%'
。
以 root 身份登录 mysql 并运行 SHOW GRANTS FOR 'my-user'@'localhost';
返回 GRANT USAGE ON *.* TO 'my-user'@'localhost' IDENTIFIED BY PASSWORD hashedPassword
。
附加信息 2
删除my-user
('my-user'@'localhost'
和'my-user'@'127.0.0.1'
)然后使用GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'localhost' IDENTIFIED BY 'password';
和GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'127.0.0.1' IDENTIFIED BY 'password';
然后FLUSH PRIVILEGES;
重新创建它们之后SHOW GRANTS FOR 'my-user'@'localhost'
的输出是然后
GRANT USAGE ON *.* TO 'my-user'@'localhost' IDENTIFIED BY PASSWORD 'passwordHash'
GRANT ALL PRIVILEGES ON 'my_database' TO 'my-user'@'localhost'
'my-user'@'127.0.0.1'
的类似输出。
但这仍然给我和以前一样的错误,还有什么想法吗?
【问题讨论】:
如果你 ssh 到服务器并运行mysql -u my-user -pmy_database my_database
会发生什么?也可以在mysql中运行SHOW GRANTS FOR my-user
吗?
感谢@Moein - 我已将这些命令的输出添加到问题的末尾(评论太长了),看起来该用户没有我认为的权限。你知道为什么会这样吗?通过 phpmyadmin 查看表格显示权限在那里。
GRANT USAGE ON 基本上没有授权 :D 尝试运行GRANT ALL PRIVILEGES ON *.* TO 'my-user'@'localhost'
然后FLUSH PRIVILEGES
哈哈,这就解释了,谢谢(我回家后会运行它)。仅将特权子集(选择、插入、更新、删除、更改)授予特定数据库的正确命令是什么?那是我最初尝试做的,但显然做错了。
想要限制该用户的权限和仅访问特定数据库的原因是因为这是我的应用程序使用的用户(因此它不应该有权访问整个数据库集) .
【参考方案1】:
正如 cmets 中所讨论的,您对数据库没有任何特权。 所以运行它可以解决你的问题:
GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'localhost'
关于您为什么必须在参数中将其更改为 localhost 的疑问,因为这就是您要告诉 mysql 想象一下,您想将数据库访问限制在您可以运行的网络中的特定 ip
GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'192.168.1.10'
因此,将 192.168.1.10 替换为 127.0.0.1,您可以在参数中使用 127.0.0.1
【讨论】:
以上是关于Mysql 数据库连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
在 XAMPP(MacOS)中使用 php 连接 MySQL 服务器被拒绝连接