'Access denied for user 'root'@'localhost' - 我在 Linux VM 上遇到了同样的问题。在我的情况下,数据库用户在连接到数据库时访问被拒绝。
检查您用于连接Mysql 数据库的数据库用户帐户是否设置了正确的访问权限。从 shell 连接到 mysql 数据库并运行以下查询:
select user, host from mysql.user;
输出会是这样的:
+----------+-----------+
| user | host |
+----------+-----------+
| cron | % |
| custom | % |
| abc | % |
| slave | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| cron | localhost |
| abcuser | localhost |
| root | localhost |
| | aaaaabox |
| root | aaaaabox |
+----------+-----------+
如您所见,root 对 localhost、::1、127.0.0.1 具有访问权限。都是本地域。
如果您缺少其中任何一个,请使用以下命令添加缺少的:
GRANT ALL PRIVILEGES ON DBNAME.* TO 'root'@'localhost';
DBNAME 是您的数据库名称,root 是数据库用户名,localhost 是域。
请注意:您不应使用root 帐户连接到mysql 数据库。您可以创建一个单独的帐户,该帐户的访问权限仅限于应用程序数据库。
以下是创建新数据库用户帐户并从应用程序连接到数据库的方法:
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'appuserpass';
GRANT ALL PRIVILEGES ON DBNAME.* TO 'appuser'@'localhost';
GRANT ALL ON DBNAME.* TO 'appuser'@'localhost' IDENTIFIED BY 'appuserpass';
GRANT ALL ON DBNAME.* TO 'appuser'@'127.0.0.1' IDENTIFIED BY 'appuserpass';
GRANT ALL ON DBNAME.* TO 'appuser'@'::1' IDENTIFIED BY 'appuserpass';
这是连接字符串:
"ConnectionStrings": {
"DefaultConnection": "server=127.0.0.1;user=appuser;password=appuserpass;port=3306;database=DBNAME;"
},
更新:
如果您尝试从机器外部连接到 MySql 数据库,那么您需要确保:
不要忘记在完成调试后关闭远程访问。否则,这将产生额外的安全隐患。