从外部主机/IP 访问 mysql 数据库? (即:mysql工作台)

Posted

技术标签:

【中文标题】从外部主机/IP 访问 mysql 数据库? (即:mysql工作台)【英文标题】:Accessing a mysql database from external host/ip? (ie: mysql workbench) 【发布时间】:2011-08-20 09:47:11 【问题描述】:

我有一个在 x.x.x.x 上运行的 mysql 服务器,并且可以在内部访问它没有问题(当然)。但是,当尝试从外部连接时,即使用 mysql 工作台,甚至从外部服务器,我收到错误消息“不允许主机 'bla.bla.bla' 连接到这个 MySQL 服务器”。

我已经完成了:

GRANT ALL PRIVILEGES ON *.* TO mysql@x.x.x.x IDENTIFIED BY "somepass"; 我已经在 iptables 中打开了 3306 端口。

我还遗漏了另一个基本的安全问题吗?

【问题讨论】:

如果x.x.x.x 是您的服务器IP,并且您只能从该IP 获得访问权限,则您无法从其他IP 连接 这就是我的想法,有没有办法从另一个主机/IP 授予访问权限? 将权限授予user@your.ip.or.%.for any.host 【参考方案1】:

我的情况完全相似。我的 MYSQL 安装在 centOS 上。 涅槃之路如下。

    绑定地址:不起作用 授予权限:无效 Iptables 关闭时:DID 工作。

解决方案:我进入 iptables 并进行了以下更改:

    使用以下命令访问 iptables:vim /etc/sysconfig/iptables

    如果您发现以下语句,请在行首添加“#”将其注释掉。

    -A INPUT -s 123.123.123.123/32 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

    -A INPUT -j REJECT --reject-with icmp-host-prohibited

    -A OUTPUT -p tcp -m tcp --dport 3306 -j ACCEPT

    使用以下命令重新启动 iptables:service iptables restart

是的,这对我有用。希望它对某人有用。

【讨论】:

我不确定这是否对除您之外的任何人有帮助,但我对您的努力表示赞同,并会回到 *** 并在此处发布以防万一! :)【参考方案2】:

我不知道 bind-address 背后的安全细节,只是通过在虚拟机上安装 debian 服务器来学习。 这位客人有一个虚拟网卡设置为网桥,所以房子的其他人可以看到它。它的 IP 是 192.168.1.4。 从另一台计算机 (192.168.1.3) 连接失败,bind-address = 127.0.0.1。 设置bind-address = 192.168.1.4 工作正常。 (它自己的地址,字面意思) 应该是虚拟配置里面127.0.0.1的解释,不确定……

【讨论】:

【参考方案3】:

当我得到我的服务器时,即使我从 MySQL 客户端应用程序访问 mysql 也遇到了同样的问题, 然后我通过以下查询授予了 Mysql 权限。

效果很好

**GRANT ALL PRIVILEGES ON db_base.* TO db_user @'%' IDENTIFIED BY 'db_passwd';** 

db_base is the database Name
db_user is database User
db_passwd is the database password 

一旦你执行了这个刷新它,通过以下命令 FLUSH PRIVILEGES;

假设如果您希望授予访问数据库中某些表的权限,您可以使用以下命令

GRANT ALL PRIVILEGES ON db_base.HELLOWORLD TO db_user @'%' IDENTIFIED BY 'db_passwd';

HELLOWORLD 是表名

【讨论】:

【参考方案4】:

要解决这个问题,您需要执行以下命令:

mysql -u root -p
[enter in your password]
CREATE USER 'mysqluser'@'%' IDENTIFIED BY 'aC0MPL3XPa33W0RD';
GRANT ALL PRIVILEGES ON *.* TO 'mysqluser'@'%' WITH GRANT OPTION;

【讨论】:

【参考方案5】:

你需要做的

GRANT ALL PRIVILEGES ON *.* TO mysql@'bla.bla.bla' ...

@ 之后的部分是连接来自的主机,因此您只允许来自本地主机的连接。您需要允许从每个必要的远程主机(或所有主机 - ... mysql@'%' ... - 如果适用)进行访问。

【讨论】:

啊啊啊啊啊……谢谢! “%”是需要的修复。我知道有一种方法可以授予全局访问权限。我假设这对于生产服务器来说不是一个好主意? 别忘了使用 FLUSH PRIVILEGES;【参考方案6】:

您是否验证过 mysql 工作台正在尝试使用适当的用户名进行连接?运行 grant 命令后你有flushed the privileges 吗?

【讨论】:

【参考方案7】:

注释掉该行:

bind-address = localhost
#bind-address = localhost < this is what it should look like.

在您的 MySQL my.conf 文件中。它通常位于 /etc/mysql/my.conf 中。

【讨论】:

没有。如果是这种情况,他会收到来自主机的“连接被拒绝”错误(因为没有套接字监听),而不是来自 MySQL 服务器的“拒绝访问”错误。【参考方案8】:

您是否以用户 mysql 的身份连接?您可以尝试将 GRANT 查询运行为:GRANT ALL PRIVILEGES ON *.* TO mysql@x.x.x.x IDENTIFIED BY "somepass";

【讨论】:

刚刚看到您的编辑。忽略我的查询建议。你的 /etc/my.cnf 是什么样的? 是的,我这样做了,还创建了一个辅助用户并将所有权限授予该用户,但无济于事。我确实意识到问题是我正在访问远程 mysql 服务器,我只是想知道如何授予远程用户访问权限? (即,使用笔记本电脑上的 mysql 工作台连接到我的远程服务器) 可能与您的 my.cnf 文件有关吗?你有bind-address=x.x.x.x吗?

以上是关于从外部主机/IP 访问 mysql 数据库? (即:mysql工作台)的主要内容,如果未能解决你的问题,请参考以下文章

如何设置VMware虚拟机使主机能够根据ip和端口访问虚拟机里的数据库(MySQL和oracle),求大神集体的操作

【php】外部主机访问虚拟机IP,自动跳转IIS7

MYSQL数据库如何赋予远程某个IP访问权限

20180601_设置mysql允许外部IP连接

从外部 IP 连接到 MySql

Nginx反向代理常用配置