从外部主机/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工作台)的主要内容,如果未能解决你的问题,请参考以下文章