如何在MySQL用户名中使用动态DNS名称?

时间:2012-01-08 18:30:08

标签: mysql mysql-management

我在一个大的坏网络中有一个服务器,我想在我的家庭系统上运行一个mysql客户端连接到它。出于明显的安全原因,我希望MySql服务器只允许我的IP地址连接。我有一个dyndns.org帐户,可以跟踪我当前的IP地址。康卡斯特当然可以随时更改我的IP地址。

所以我创建了一个这样的用户:

CREATE USER 'user'@'mememe.dyndns.org' IDENTIFIED BY 'changeme';
GRANT ALL PRIVILEGES ON mydata TO 'user'@'mememe.dyndns.org';

因此,当我尝试从家庭系统连接到此服务器时,我得到:

ERROR 1130 (HY000): Host 'c-98-234-122-18.hsd1.ca.comcast.net' is not allowed to connect to this MySQL server

当然,MySQL看到的主机名是RDNS查找IP地址的内容。我想要的是让它识别dyndns.org名称。有没有办法做到这一点?

如果没有办法做到这一点,这是否意味着我被迫创建带有通配符或特定IP地址的用户名?

2 个答案:

答案 0 :(得分:4)

您想要达到的目标是绝对不可能的,请考虑事件流程

  1. 用户连接到MySQL
  2. MySQL解析将IP连接到主机名(c-98-234-122-18.hsd1.ca.comcast.net)
  3. MySQL查找此(用户,主机名)元组以获取权限
  4. MySQL绝不会查找'mememe.dyndns.org'。

答案 1 :(得分:3)

问题是comcast主机名是该IP的规范反向查找名称,而不是您的DynDNS名称。你想做的事情在MySQL中根本不可能。

但是,如果你有自己的服务器,那么从另一个角度处理这个问题怎么样 - 允许来自mySQL中任何IP的连接,但是使用服务器的防火墙进行基于IP的过滤?一个成熟的防火墙产品可能有更多的可能性来解决这个问题。

This blog post显示了一种从动态DNS主机更新iptables记录的方法。也许这是一个开始。否则,搜索查询,例如" Linux Firewall Dyndns"或" iptables dyndns"可能会提出解决方案。

关于此问题,可能还值得就Serverfault单独提问。