skip_name_resolve 参数以及是否开启域名解析方式授权账号

问题1:
测试环境
my.cnf 
[mysqld]
……
skip_name_resolve
……
2018-09-19T08:50:07.831805+08:00 0 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.831865+08:00 0 [Warning] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.831932+08:00 0 [Warning] 'user' entry 'zabbix@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832064+08:00 0 [Warning] 'user' entry 'yunwei_admin@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832113+08:00 0 [Warning] 'user' entry 'baker@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832159+08:00 0 [Warning] 'user' entry 'root@dba' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832173+08:00 0 [Warning] 'user' entry 'dba01@dba' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832218+08:00 0 [Warning] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832259+08:00 0 [Warning] 'db' entry 'gxyj_ctpf yunwei_admin@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832266+08:00 0 [Warning] 'db' entry 'gxyj yunwei_admin@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832272+08:00 0 [Warning] 'db' entry 'bbs yunwei_admin@localhost' ignored in --skip-name-resolve mode.
2018-09-19T08:50:07.832296+08:00 0 [Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.

在配置文件里,设置这个参数,错误日志会提示warning,带有localhost,和其他域名解析的账号会被忽略。

但是生产环境 却不是:
[mysqld]
……
skip_name_resolve
……
2018-09-19T04:44:59.728949+08:00 10465669 [Note] Aborted connection 10465669 to db: 'db' user: 'user01' host: '10.xx.xx.xx' (Got timeout reading communication packets)
2018-09-19T04:45:59.874871+08:00 10468266 [Note] Aborted connection 10468266 to db: 'db' user: 'user02' host: '10.xx.xx.xx' (Got an error reading communication packets)
2018-09-19T04:46:22.747302+08:00 10468276 [Note] Aborted connection 10468276 to db: 'db' user: 'user02' host: '10.xx.xx.xx' (Got an error reading communication packets)

找不到错误日志里有 ignored in --skip-name-resolve mode 字样,不知为什么没有提示。生产上也存在 root@localhost 这种带域名的账号。

当允许解析 host 的时候 ,processlist 里 host 不显示具体 IP 了,而是显示域名,这样如果域名对应多个 IP,问题比较不好排查了
 
    Id  User    Host       db      
------ ------ --------- ------
3 root localhost (NULL)
5 dba01 dba:57108 (NULL)
6 dba01 dba:57109 (NULL)
9 dba01 dba:60588 (NULL)
10 dba01 dba:60590 (NULL)
11 dba01 dba:60589 (NULL)




问题2:
如果我们在给账号授权的时候,想用限制 IP 访问,那么我们是否要用 host 方式去做呢?

某个数据库,程序服务器有N多台,都要访问数据库。如果做限制 IP 访问,不做 host 解析的话,只能每个 IP 建一个账号,这样的话,会建很多账号。如果用 host 解析 的方式,那么就依赖系统的 /etc/hosts 文件,如果有文件权限的人,就可以随意加 host ,从而获得访问数据库权限。

目前生产环境 IP 段不完全相同,异地机房的 IP 段就不一致,这样做 % 部分模糊匹配也不合适(10.xx.xx.%),而且这样只要能访问生产服务器,就可以访问数据库也不安全。

似乎目前最安全的办法,就是完整 IP 限制,每个 IP 一个账号,这样数据库多了很多账号。
 
已邀请:

要回复问题请先登录注册