- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章关于skip_name_resolve参数的总结分享由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
作为MySQL调优的一部分,很多人都推荐开启skip_name_resolve。这个参数是禁止域名解析的(当然,也包括主机名)。很多童鞋会好奇,这背后的原理是什么,什么情况下开启这个参数比较合适.
基于以下原因,MySQL服务端会在内存中维护着一份host信息, 包括三部分:IP,主机名和错误信息。主要用于非本地TCP连接.
1. 通过在第一次建立连接时缓存IP和host name的映射关系,同一主机的后续连接将直接查看host cache,而不用再次进行DNS解析.
2. host cache中同样会包含IP登录失败的错误信息。可根据这些信息,对这些IP进行相应的限制。后面将会具体提到.
host cache的信息可通过performance_schema中host_cache表查看.
那么,IP和host name的映射关系是如何建立的呢?
1. 当有一个新的客户端连接进来时,MySQL Server会为这个IP在host cache中建立一个新的记录,包括IP,主机名和client lookup validation flag,分别对应host_cache表中的IP,HOST和HOST_VALIDATED这三列。第一次建立连接因为只有IP,没有主机名,所以HOST将设置为NULL,HOST_VALIDATED将设置为FALSE.
2. MySQL Server检测HOST_VALIDATED的值,如果为FALSE,它会试图进行DNS解析,如果解析成功,它将更新HOST的值为主机名,并将HOST_VALIDATED值设为TRUE。如果没有解析成功,判断失败的原因是永久的还是临时的,如果是永久的,则HOST的值依旧为NULL,且将HOST_VALIDATED的值设置为TRUE,后续连接不再进行解析,如果该原因是临时的,则HOST_VALIDATED依旧为FALSE,后续连接会再次进行DNS解析.
另,解析成功的标志并不只是通过IP,获取到主机名即可,这只是其中一步,还有一步是通过解析后的主机名来反向解析为IP,判断该IP是否与原IP相同,如果相同,才判断为解析成功,才能更新host cache中的信息.
基于上面的总结,下面谈谈 host cache的优缺点:
缺点:当有一个新的客户端连接进来时,MySQL Server都要建立一个新的记录,如果DNS解析很慢,无疑会影响性能。如果被允许访问的主机很多,也会影响性能,这个与host_cache_size有关,这个参数是5.6.5引入的。5.6.8之前默认是128,5.6.8之后默认是-1,基于max_connections的值动态调整。所以如果被允许访问的主机很多,基于LRU算法,先前建立的连接可能会被挤掉,这些主机重新进来时,会再次进行DNS查询.
优点:通常情况下,主机名是不变的,而IP是多变的。如果一个客户端的IP经常变化,那基于IP的授权将是一个繁琐的过程。因为你很难确定IP什么时候变化。而基于主机名,只需一次授权。而且,基于host cache中的失败信息,可在一定程度上阻止外界的暴力破解攻击.
关于阻止外界的暴力破解攻击,涉及到max_connect_errors参数,默认为100,官方的解释如下:
。
首先,设置max_connect_errors的值 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
mysql> show variables
like
'max_connect_errors'
;
+
--------------------+-------+
| Variable_name | Value |
+
--------------------+-------+
| max_connect_errors | 100 |
+
--------------------+-------+
row
in
set
(0.00 sec)
mysql>
set
global
max_connect_errors=2;
Query OK, 0
rows
affected (0.00 sec)
mysql> show variables
like
'max_connect_errors'
;
+
--------------------+-------+
| Variable_name | Value |
+
--------------------+-------+
| max_connect_errors | 2 |
+
--------------------+-------+
row
in
set
(0.00 sec)
|
通过telnet模拟interrupted without a successful connection.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@mysql-slave1 ~]# telnet 192.168.244.145 3306
Trying 192.168.244.145...
Connected
to
192.168.244.145.
Escape
character
is
'^]'
.
N
5.6.26-log
K]qA1nYT!w|+ZhxF1c#|kmysql_native_password
^]
!#08S01Got packets
out
of
orderConnection closed
by
foreign
host.
[root@mysql-slave1 ~]# telnet 192.168.244.145 3306
Trying 192.168.244.145...
Connected
to
192.168.244.145.
Escape
character
is
'^]'
.
N
Y#>PVB(>!Bl}NKnjIj]sMmysql_native_password
^]
!#08S01Got packets
out
of
orderConnection closed
by
foreign
host.
[root@mysql-slave1 ~]# mysql -h192.168.244.145 -uroot -p123456
Warning: Using a
password
on
the command line interface can be insecure.
ERROR 1129 (HY000): Host
'192.168.244.144'
is
blocked because
of
many
connection
errors; unblock
with
'mysqladmin flush-hosts'
|
即便后来使用了正确的账号和密码登录,依旧会被阻止.
再来看看host_cache表中的信息,sum_connect_errors为2了.
1
2
3
4
5
6
7
|
mysql>
select
ip,host,host_validated,sum_connect_errors,count_authentication_errors
from
performance_schema.host_cache;
+
-----------------+------+----------------+--------------------+-----------------------------+
| ip | host | host_validated | sum_connect_errors | count_authentication_errors |
+
-----------------+------+----------------+--------------------+-----------------------------+
| 192.168.244.144 |
NULL
| YES | 2 | 0 |
+
-----------------+------+----------------+--------------------+-----------------------------+
row
in
set
(0.00 sec)
|
该阻止会一直生效,直到采取以下操作:
1. mysql> flush hosts,
2. # mysqladmin flush-hosts 。
3. truncate table performance_schema.host_cache,
4. 或者等待该记录从host cache中被挤掉.
。
如果要禁止DNS解析,可设置skip_name_resolve参数,这样,mysql.user表中基于主机名的授权将无法使用,且错误日志中会提示:
1
|
[Warning]
'user'
entry
'root@mysql-slave1'
ignored
in
--skip-name-resolve mode.
|
这里,通过mysql-slave1访问,将会拒绝访问 。
1
2
3
|
[root@mysql-slave1 ~]# mysql -h192.168.244.145 -uroot -p123
Warning: Using a
password
on
the command line interface can be insecure.
ERROR 1045 (28000): Access denied
for
user
'root'
@
'192.168.244.144'
(using
password
: YES)
|
host cache是默认开启的,如果要禁掉,可将host_cache_size设置为0,该参数是个动态参数,可在线修改.
如果要完全禁掉TCP/IP连接,可在MySQL启动时,设置skip-networking参数.
总结:
。
1. 从原理上看,DNS解析一般只针对客户端的第一次连接,客户端数据量比较小的情况下,开销其实不大,完全不必启动skip_name_resolve参数,带来的好处就是,为客户端和多变的IP直接解耦,只需对主机名进行一次授权.
2. 在没开启skip_name_resolve情况下,无论是通过# mysql -p123456 走socket连接还是# mysql -p123456 -h127.0.0.1走TCP连接,显示的用户都是root@localhost。如果要显示root@127.0.0.1,必须开启skip_name_resolve参数.
另,可通过\s查看当前连接使用的是socket还是TCP.
以上这篇关于skip_name_resolve参数的总结分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
最后此篇关于关于skip_name_resolve参数的总结分享的文章就讲到这里了,如果你想了解更多关于关于skip_name_resolve参数的总结分享的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
1、定义 设 \(u\) 和 \(v\) 为一张图上的任意两个节点。令 \(c(u, v)\) 为它们之间的边的容量, \(f(u, v)\) 为它们之间的流量,则需要满足以
1、前言 工作中涉及到文件系统,有时候需要判断文件和目录是否存在。我结合apue第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便以后查询。 2、stat系列函数 stat函数用来
并查集(Union-Find Set): 一种用于管理分组的数据结构。它具备两个操作:(1)查询元素a和元素b是否为同一组 (2) 将元素a和b合并为同一组。 注意:并查集不能将在同一组的元素拆
当下,注解非常流行,以前很长篇的代码,现在基本上一个注解就能搞定。 那,在Mybatis中又有哪些注解呢? Mybatis中的注解基本上都在org.apache.ibatis.annotat
指针操作数组,方法一是p+index,方法二是p[index],第二种方法跟数组访问方法是一样的。 数组引用返回的是数组的第一个元素的指针地址。 可以将指针指向数组的任意元素,然后从那里开始访问
通常部署完php环境后会进行一些安全设置,除了熟悉各种php漏洞外,还可以通过配置php.ini来加固PHP的运行环境,PHP官方也曾经多次修改php.ini的默认设置。 下面对php.ini中一
在JavaScript中,使用typeof可以检测基本数据类型,使用instanceof可以检测引用数据类型。在PHP中,也有检测数据类型的方法,具体如下: 1、输出变量的数据类型(gettype
把图片缓存到本地,在很多场景都会用到,如果只是存储文件信息,那建一个plist文件,或者数据库就能很方便的解决问题,但是如果存储图片到沙盒就没那么方便了。这里简单介绍两种保存图片到沙盒的方法。
(1)需要安装docker容器,在docker容器内安装jenkins,gogs,tomcat。 新建maven项目,添加findbugs plugin。 使用docker
今天主题是实现并发服务器,实现方法有多种版本,先从简单的单进程代码实现到多进程,多线程的实现,最终引入一些高级模块来实现并发TCP服务器。 说到TCP,想起吐槽大会有个段子提到三次握手,也只有程序
如下所示: Ctrl+1或F2快速修复 Ctrl+D快捷删除行 Shift+Enter 快速切换到下一行,在本行的任何位置都可 Ctrl+F11快速运行代码 Alt+上下键 快速移动行(可
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。 JSP编译后是”类servlet”。 Servlet和JSP最主要的不同点在于,Servlet的应用逻辑
Java中的Runable,Callable,Future,FutureTask,ExecutorService,Excetor,Excutors,ThreadPoolExcetor在这里对这些关键
读取Java文件到byte数组的三种方法(总结) ? 1
用java实现的数组创建二叉树以及递归先序遍历,递归中序遍历,递归后序遍历,非递归前序遍历,非递归中序遍历,非递归后序遍历,深度优先遍历,广度优先遍历8种遍历方式:
1、简明总结 ASCII(char) 返回字符的ASCII码值 BIT_LENGTH(str) 返回字符串的比特长度 CONCAT(s1,s2…,sn)
java应用服务器(web server),是指运行java程序的web应用服务器软件,不包括nginx、Apache等通用web服务器软件。 一、Tomcat Tomcat是Apache 软件基
事务作为抽象层,允许应用忽略DB 内部一些复杂并发问题和某些硬件、软件故障,简化应用层的处理逻辑:事务中止(transaction abort),而应用仅需重试。对复杂访问模式,事务可大大减少需要考虑
我们在本教程学习了如何描述 XML 文档的结构 我们学习到了如何使用 DTD 来定义一个 XML 文档的合法元素,以及如何在我们的 XML 内部或者作为一个外部引用来声明 DTD 我们学习了如何为
在这个XPath 基础教程中我们讲解了如何在 XML 文档中查找信息 我们可以使用 XPath 的元素和属性在 XML 文档中进行导航 我们也学习了如何使用 XPath 中内建的某些标准函数 如
我是一名优秀的程序员,十分优秀!