我有一个 aws ec2 ubuntu,apache 服务器设置了 mysql。我的问题是我能够通过命令行连接到 mysql。但是,如果我尝试使用 Mysql Workbench 或类似的程序连接到数据库,我可以登录到服务器并查看所有数据库和表,但无法运行任何选择查询或对数据库执行除查看之外的任何操作。
我尝试做过
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345';
但是它似乎没有解决问题?我收到一条错误消息
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
我确认已将 bind-address 设置为 0.0.0.0 。当我在命令行上查看用户表时,我确实看到了用户 root 的一行,其中列出了主机 %。
答案1
您一定不能将 MySQL 端口开放到互联网,这太不安全了。更多信息可以在这里找到https://security.stackexchange.com/questions/63881/is-it-not-safe-to-open-mysqls-port-to-the-internet。
最受欢迎的方式是在 MySQL 上运行一个应用程序,它处理用于数据访问的用户界面/API。
如果确实需要远程 SQL 访问数据库,则应该使用 SSH 隧道来实现。https://dev.mysql.com/doc/workbench/en/wb-mysql-connections-methods-ssh.html显示相关说明。
您的数据库密码也应该始终是安全的。
答案2
只需使用 SSH 隧道。ssh -L3307:localhost:3306 ec2-user@your_ec2_host
;然后将您的 Mysql Workbench 指向localhost:3307
。注意:这些是两个不同的 localhost
's; 第一个是指your_ec2_host
从它自己的角度,第二个是指你的开发机器,你ssh
来自哪里。
现在,我知道你已经听过这句话 500 遍了;再听一遍。
我已将绑定地址设置为 0.0.0.0
— 不要这样做。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345';
也不要这样做。创建一个单独的用户,并授予它最低所需的权限。
我可以登录到服务器并查看所有数据库和表,但不能运行任何选择查询或对数据库执行除查看之外的任何操作。
出现这种情况的原因可能是您的 mysqld 有另一个用户,root@localhost
,仅具有访问 DB 模式的权限,仅此而已。对于 MySQL 来说,这是不同的用户;此外,获胜的GRANT
规则是 — 因为前者比后者 %-wildcard 更具体。root@localhost
root@'%'
您应该知道这一点 — 如果您没有作弊,选择 root 用户,而忽略了了解 MySQL 用户和权限的工作方式。认真地说:创建一个单独的用户。
答案3
MySQL Workbench 支持 ssh 隧道:https://dev.mysql.com/doc/workbench/en/wb-mysql-connections-methods-ssh.html
MySQL Workbench 正在内部使用波拉米科python 模块。过去,由于一些错误,我不得不手动更新它。但较新版本的 MySQL Workbench 附带了更新版本的 paramiko。因此请确保您使用的是最新版本的 MySQL Workbench。
您将需要用户名/密码对或用户名/ssh_key 对进行身份验证,以及 SSH 服务器主机名或 IP。