【MySQL】MySQL 的 SSL 连接以及连接信息查看

MySQL 的 SSL 连接以及连接信息查看

在上篇文章中,我们学习过 MySQL 的两种连接方式,回忆一下,使用 -h 会走 TCP 连接,不使用 -h 可以使用另两种方式来走 UnixSocket 连接。我们就接着这个话题再聊点别的,首先要纠正一下之前讲的,-h 不一定全是走 TCP 连接。然后我们顺着这个话题,再看一下 MySQL 中如何指定使用安全连接的问题。在学习这两个问题中,我们还将接触到一个查看当前连接状态的命令。

再谈连接方式

上回我们已经讲过有两种连接方式,在讲问题之前,我们先了解一个 MySQL 命令工具,它就是 \s 命令(全称是 status ,你也可以使用 \status 或者 status; 来查看)。

➜  ~ mysql -hlocalhost -urootWelcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.17 HomebrewCopyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> \s
--------------
mysql  Ver 8.0.17 for osx10.14 on x86_64 (Homebrew)Connection id:  11
Current database:
Current user:  root@localhost
SSL:   Not in use
Current pager:  less
Using outfile:  ''
Using delimiter: ;
Server version:  8.0.17 Homebrew
Protocol version: 10
Connection:  Localhost via UNIX socket
Server characterset: utf8
Db     characterset: utf8
Client characterset: utf8mb4
Conn.  characterset: utf8mb4
UNIX socket:  /tmp/mysql.sock
Uptime:   18 min 55 secThreads: 2  Questions: 20  Slow queries: 0  Opens: 113  Flush tables: 3  Open tables: 35  Queries per second avg: 0.017
--------------

看出来作用了吗?它可以展示我们当前的连接状态以及服务器的一些系统信息。Current user 和 Current database 就是我们上回学习的 SELECT CURRENT_USER() 和 SELECT DATABASE() 返回的内容。

SSL 的内容我们后面马上就要说,先来看一下 Connection 这个字段的内容。如果你使用的 -h 是 localhost 的话,那么它走的其实也是 UnixSocket 方式。而我们换一下,将连库语句变成 127.0.0.1 会怎么样?

➜  ~ mysql -h127.0.0.1 -uroot
# .......
# .......
mysql> \s
# .......
# .......
Connection:  127.0.0.1 via TCP/IP
# .......
# .......

看出来了吧?换成 IP 或者换成别的 hosts 指向别名,都会变成 TCP 的连接方式。但是只有 localhost 是例外的。我们可以认为,在 MySQL 的内部,对这个特殊的名称做了特别的判断,如果连接的是 localhost ,就认为这个连接客户端和 MySQL 服务器是在同一台主机的,这时就会直接以 UnixSocket 的方式连接,毕竟 UnixSocket 的性能更好。

注意,很多小伙伴有时候用 localhost 连接不上本机的数据库,问题就很有可能出现在 mysql.sock 这个文件的配置可能有误。

如果我们想强制 localhost 也使用 TCP 方式的话,应该怎么弄呢?其实还是上篇文章中提到的那个属性,可以在命令行使用,也可以配置到 my.cnf 中去。

➜  ~ mysql -hlocalhost -uroot --protocol=tcp
# .......
# .......
Connection:  localhost via TCP/IP

SSL 安全连接

SSL 是啥相信不用我多解释了吧,毕竟现在 HTTPS 都已经成标配了,都是一样的使用 OpenSSL 来进行安全加密传输的。而且在 MySQL 中,对于远程的 TCP 连接,默认就是走这种 SSL 加密传输的。不信上面的 \s 命令输出的内容中就有。

➜  ~ mysql -hlocalhost -uroot --protocol=tcp
# .......
SSL:   Cipher in use is TLS_AES_256_GCM_SHA384
# .......
Connection:  localhost via TCP/IP

注意,如果是 UnixSocket 模式下,SSL 这个属性的内容永远是 Not use ,毕竟本机是没有远程传输问题的。

好吧,默认就是启用这种传输连接方式的,那么我们是不是可以关闭它呢?当然可以,我们可以在客户端连接的时候选择不用安全方式连接。

➜  ~ mysql -h192.168.56.133 -uroot --protocol=tcp --ssl-mode=disabled
# .......
SSL:   Not in use
# .......

那么它会不安全在哪里呢?我们直接用 WireShark 来抓包试试。

ed2e8ed90b5012898035bb9a07cb49f0.png

看到没有,如果是使用了非 SSL 的方式连接,那么我们通过抓包软件是可以抓到执行的 SQL 语句信息。你可以自己再尝试下使用默认的开启 SSL 连接的方式去连接远程 MySQL 服务器,看看还能不能抓到我们执行的 SQL 语句。

客户端可以指定连接的 --ssl-mode ,感觉很不安全呀,其实,我们也可以强制让所有连接都必须使用 SSL 模式,那就是修改一下服务端的 my.cnf 。

[server]
require_secure_transport=1

这时,我们再使用 --ssl-mode=disabled 去连接服务端的话,就会出现如下的错误信息。

➜  ~ mysql -h192.168.56.133 -uroot -p --ssl-mode=disabled
Enter password:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

既然 SSL 对我们的数据安全有非常重要的作用,而且还默认就是使用 SSL 的方式进行连接的,那么有没有什么特殊的情况是我们不需要去使用 SSL 的呢?有。

SSL 在普通的 TCP 连接的基础上增加了证书相关的验证操作,包括早年 HTTPS 都不是标配的年代,就是因为加了证书验证之后会降低系统的性能。本来我们可以处理的 QPS 是 3000 ,使用了 SSL 之后可能就会变成 2000 (参考文末第二条链接)。这个性能损耗说实话还是挺严重的。因此,如果是压力非常大的,并且没有核心机密数据的数据库,其实确实是可以使用非 SSL 连接的,能够有效提升数据的执行效率。比如说,一些统计上报型的数据,只是记录日志,然后进行汇总查询,再将结果放到其它数据库,这种记录日志上报的数据库,使用非 SSL 连接是完全可以的。

当然,不是什么特别极端的状态下,还是尽量保持默认状态吧,安全始终是首要的问题。

总结

今天的内容不知道你有没有什么收获,反正在我学习之后感觉真的是收获满满呀。一是继续深入了解到了 UnixSocket 对于 localhost 还有特殊的对待,调用本机数据库的时候没特别的要求还是直接用 localhost 性能会更好一些,因为它会走 UnixSocket ;二是发现了 SSL 相关的配置原来是可选的,可以根据我们的需要调整传输性能;三是 \s 命令非常实用。文末第二条连接的参考文档有对于 SSL 更详细的配置及解读,大家有兴趣的也可以再深入地学习一下。

参考文档:

https://dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html#option_mysql_ssl

https://blog.csdn.net/weixin_35688430/article/details/107906576

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525086.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springMVC自定义异常处理器

目录 🌱使用原因 🌳优点 🌱实现 🌳自定义一个异常 🌳异常处理 🌳测试 使用原因 系统中会有各种各样的,意料之中和意料之外的结果,我们并不能做到完全针对每个异常时刻做出针对…

图像处理ASIC设计方法 笔记7 图像存储SPRAM控制

(一)图像存储SPRAM控制 P83 模块三 图像存储SPRAM控制 输入的图像要存放在这个模块中。这个SPRAM的数据组织和读/写控制是设计的重点之一。 SPRAM是多个块的形式。用的是单端口RAM,采用分时读或者写(读写不同时),起到双端口的效果。应该用的是单端口RAM(Single-por…

【鸿蒙开发】第十七章 Web组件(一)

1 Web概述 Web组件用于在应用程序中显示Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。 页面加载:Web组件提供基础的前端页面加载的能力,包括:加载网络页面、本地页面、html格式文本数据。 页面交互&#xff1a…

WebSocket:实现客户端与服务器实时通信的技术

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

RHCE——二、时间管理器与远程登陆服务

RHCE——二、时间管理器与远程登陆服务 一、chrony服务器1、简介重要性Linux的两个时钟设置日期时间timedatectl命令设置date命令设置 NTPChrony介绍 2、安装与配置安装:Chrony配置文件分析实验1实验2重启报错解决方法 二、远程登录服务 一、chrony服务器 1、简介 …

方法的使用

1.什么是方法(method) 在java中方法就是一个代码片段.。几乎相当于c语言的函数。 2.方法定义 方法跟函数是几乎一样的。所以语法是大差不差的。就多了一点东西。之前我们在c语言里已经很详细讲过了函数。这里就简便的讲一下。 相比c语言函数多了个修饰符 。 现在看下其注意…

浅述字典攻击

一、前言 字典攻击是一种常见的密码破解方法,它使用预先编制的字典文件作为攻击字典,通过尝试猜测密码的方式来破解密码。下面是一个关于字典攻击的博客,希望能够为您了解字典攻击提供帮助。 二、字典攻击概述 字典攻击是一种密码破解方法&…

义乌等保测评公司有哪些?用哪款堡垒机好?

对于义乌,相信大家都听过,也都知道,耳熟能详。这不有义乌小伙伴在问,义乌等保测评公司有哪些?用哪款堡垒机好?今天我们就来简单聊聊。 义乌等保测评公司有哪些? 目前浙江义乌本地暂未有正规等保…

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(三)

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(前导) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(二) 八、板级验证 1.验证内容 通过电脑…

套接字的地址结构,IP地址转换函数,网络编程的接口

目录 一、套接字的地址结构 1.1 通用socket地址结构 1.2 专用socket地址结构 1.2.1 tcp协议族 1.2.3 IP协议族 二、IP地址转换函数 三、网络编程接口 3.1 socket() 3.2 bind() 3.3 listen() 3.4 accept() 3.5 connect() 3.6 close() 3.7 recv()、send() 3.8 recv…

云原生构建 微服务、容器化与容器编排

第1章 何为云原生,云原生为何而生 SOA也就是面向服务的架构 软件架构的发展主要经历了集中式架构、分布式架构以及云原生架构这几代架构的发展。 微服务架构,其实是SOA的另外一种实现方式,属于SOA的子集。 在微服务架构下,系统…

和数软件:区块链技术的爆发与冲击

什么是区块链?它是如何发展而来的?应用在哪些领域?将会对我国的社会经济产生哪些重大影响? 什么是区块链 区块链作为一种底层技术,最早的实践是数字货币。根据最早的中本聪定义,区块链实质上是一种基于网…