mysql 密码sha256_MySQL5.6启用sha256_password插件

一、背景:

使用MySQL5.6过程中,发现默认的加密插件为mysql_native_password。而sha256_password的安全程度要比mysql_native_password高,尝试切换为sha256_password。

二、配置过程:

资料:

1、从MySQL官网查询到服务器端sha256_password无需显式加载,可以在MySQL配置文件中配置使能。

[mysqld]

default-authentication-plugin=sha256_password

2、据官网描述,要启用插件,须通过ssl方式进行连接,也就是说需要配置相关证书。

实现过程:

18fb7e12d467a3d0542795a5c6d726c9.png

583c62fba1148c2192c75738daf4cc14.png

2、安装MySQL

下载的的MySQL是zip格式的,解压到磁盘后,将my-default.ini另存为my.ini(此处看个人爱好,可不用),关于my.ini需要修改的地方如下:

1)basedir datadir port 需要根据自己使用情况配置。

2)配置默认启用的加密插件。

65d9ef86642116d6ed5c0feec56910cf.png

3、简单配置完mysql配置文件后,以管理员方式打开cmd,进入第二步解压后的xxxmyql/bin目录。

1)执行mysqld -install(tips:mysqld -remove 是卸载mysql),也可以执行服务名称及配置文件路径:mysqld install mysql5 --defaults-file="E:\mysql5.6\my.ini"

421624ca19e38c89489f00cd2fa83340.png

2)执行net start mysql5启动MySQL服务(我的服务名称为mysql5,上一步install时指定了服务名称,如果install时没指定默认就是MySQL)

5ec1a22c426b403ef9afe77d8dc12c10.png

3)输入mysql -uroot -p连接数据库。第一次进入没有密码,直接回车。

86348450f163e7a4210a93722d8f97b2.png

4)进入mysql数据库,查询user表的内容,发现默认使用的加密插件为mysql_native_password如下图。

b49480a8a6aef57a217a965a46b24d0f.png

是不是my.ini配置的sha256_password没有生效呐?创建一个用户验证下插件是否生效。执行:CREATE USER 'test01'@'localhost' IDENTIFIED BY 'password';发现默认插件是生效了的。但是默认的root为啥不是sha256_password呢,我猜想(只是猜想)

可能是假如root用户默认为sha256_password,那么使用root连接的话,就需要配置相关证书,这样使MySQL的安装过程复杂且使用体验降低。

882600bac57dc74dc588a5f472be41f6.png

使用新创建的用户test01登录数据库,因为test01用户使用了sha256_password,此时是登录失败的,提示身份验证需要SSL加密。所以要使用了sha256_password插件的用户是需要通过SSL加密的,也就是需要证书的。

3383c1cd80f40d894d474a80f8e4287b.png

5)补充一点:安装完成后root用户是没有密码的,要设置密码可以执行mysqladmin -u root -p password,Enter password:直接回车,因为此时root时没有密码的,接着输入及确认输入自己的密码。至此MySQL的安装已经完成。

c0a312ee83e7ef11dada0317d55ec7e0.png

3.证书制作及使能

a 生成一个 CA 私钥:openssl genrsa 2048 > ca-key.pem

b 私钥生成一个新的数字证书:openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem,执行过程中需要填写一些内容,如国家、城市、邮箱等根据实际情况填写。

c16fcecad30403610813483a81d40598.png

c 创建服务侧的私钥及数字证书:openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem > server-req.pem

此时会填写一些内容如b步骤,其中有个密码可以直接回车。

d 将生成的私钥转换为 RSA 私钥文件格式:openssl rsa -in server-key.pem -out server-key.pem

e  使用CA 证书来生成一个服务器端的数字证书:openssl x509 -sha1 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem

至此,服务端相关证书已创建成果,下面创建客户端证书。

f 为客户端生成一个私钥和证书:openssl req -sha1 -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem > client-req.pem  需要填写问题见步骤b

g 将生成的私钥转换为 RSA 私钥文件格式:openssl rsa -in client-key.pem -out client-key.pem

h 为客户端创建一个数字证书:openssl x509 -sha1 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem

至此,客户端和服务端证书全部创建完毕,生产八个文件如下:

a1a2db4b81c2e3ddc015f1c7a5214409.png

2)配置证书

a 现在数据库中是没有开启SSL的,执行命令查看:show variables like'%ssl%';

192126d74d81481acc6b202fcb1f8aaa.png

b 开启SSL方法:证书使能,在MySQL的配置文件my.ini中指定服务端证书路径

ssl-ca=E:/mysql5.6/cert/ca-cert.pem

ssl-cert=E:/mysql5.6/cert/server-cert.pem

ssl-key=E:/mysql5.6/cert/server-key.pem

c 重启MySQL服务,执行net stop mysql5停止服务,再执行net startmysql5开启服务

46f4b3701e3d6de35205d237197c5675.png

d 再次执行show variables like'%ssl%'; 查看SSL已经开启了

06121c922683edbdcd7da1e67138ebd7.png

至此MySQL安装及配置证书过程结束。

测试:

1、上面步骤中,在数据库中创建了以sha256_password加密的test01用户,密码为password。此时我们用一般的方式连接肯定会报错

a47b8132c4deaa4da414dc7f28259778.png

2、使用开启SSL、指定证书的方式连接就是成功的,且通过\s 可以看出SSL信息,命令:mysql --ssl-ca=E:\mysql5.6\cert\ca-cert.pem --ssl-cert=E:\mysql5.6\cert\client-cert.pem --ssl-key=E:\mysql5.6\cert\client-key.pem -u test01 -ppasswor

1998b425f3109d947523aaece1aa4dcb.png

3、当前系统中的root用户还是mysql_native_password的加密方式,如果要想将root的加密方式修改的话执行:

use mysql;

update user set plugin='sha256_password' where user='root';

结果如下:

8c4b1c6170adab1ab90ce40f49ca5658.png

现在以root用户修改root用户的密码,执行:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1qaz@WSX');此时执行成功,再执行 FLUSH PRIVILEGES;   password列已经被修改如下图,退出客户端重新连接为啥连不上了?

eb367579601f2e5a6d187bc922613aba.png

使用ssl方式连接失败了,但是使用空密码(直接回车)登录是成功的

d3773ef08e3d7b2627944c8fdf07dbca.png

5d8614b38009f6222023ae28e1a87d02.png

这是为什么呢,通过分析之前使用sha256_password创建的test01用户发现:test01用户的passwor字段为空,authentication_string字段是有值的;而此时的root的password是有密文的,但authentication_string字段没有值。

所以我们能得出2点:

sha256_password加密的用户,密码其实是设置在authentication_string字段上的。

root登录时,修改密码插件后,执行SET PASSWORD FOR 'root'@'localhost'设置密码时,当前CMD的session没有实效,还是之前的加密插件在生效,修改的当然是password字段的值,而authentication_string字段的值依旧是空串。

ba23b2f1e3f46cd1e7d11bc9ed2c8ab2.png

最终使用空密码登录后再执行一次设置密码的命令,SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1qaz@WSX');   FLUSH PRIVILEGES;再退出,使用root及新密码登录就是成功的了。

0f37a4cd6faf82ffc6e2eb822fe70506.png

附上我的my.ini

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the

# *** default location during install, and will be replaced ifyou

#***upgrade to a newer version of MySQL.

[mysqld]

# Remove leading # andset to the amount of RAM forthe most important data

# cachein MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size=128M

# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

# log_bin

# These are commonlyset, remove the # and set asrequired.

basedir= E:/mysql5.6datadir= E:/mysql5.6/data

port=3306# server_id=.....default-authentication-plugin=sha256_password

ssl-ca=E:/mysql5.6/cert/ca-cert.pem

ssl-cert=E:/mysql5.6/cert/server-cert.pem

ssl-key=E:/mysql5.6/cert/server-key.pem

# Remove leading # toset options mainly useful forreporting servers.

# The server defaults are fasterfortransactions and fast SELECTs.

# Adjust sizesasneeded, experiment to find the optimal values.

# join_buffer_size=128M

# sort_buffer_size=2M

# read_rnd_buffer_size=2M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

View Code

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

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

相关文章

ftp无法连接虚拟机_一步步编写操作系统4 安装x86虚拟机 bochs

本节内容摘自《操作系统真象还原》,请大家支持正版Bochs下载安装在完成了linux发行版的安装后,现在到了安装bochs的环节,这是我们的操作系统最终的宿主机。由于我的工作是运维,所以练就了任何软件包都要从源码安装的“陋习”&…

python语言用什么关键字来声明一个类_Python语言和标准库(第三章:类和对象)...

python如何将函数和数据整合在一起,并且通过一个对象的名称访问它们。 如何和为什么使用类与对象,以及他们如何使编程人员易于多种情形下编写和使用程序。 3.1考虑编程 现在要在python中创建一个对对象的描述,您已有足够的只是获得两个视图。…

mysql主从1594错误_3分钟解决MySQL主从1594错误

3分钟解决MySQL主从1594错误简介Part1:写在最前1594这个错误看起来挺严重的,会提示你binlog文件或者Relay log损坏了,例如binary log is corrupted、relay log is corrupted之类的看起来很吓人是吧,多数是由于掉电引发的,这也说明了机房配备U…

ci框架 mysql 超时时间_mysql 字符集和校验规则( CHARSET amp; COLLATE)

我们首先看下常见建表语句:mallAllGoodsCREATE TABLE qywl.mallAllGoods ( id varchar(64) NOT NULL COMMENT 主键id,userId varchar(64) NOT NULL DEFAULT COMMENT 发布人id,storeId varchar(64) NOT NULL DEFAULT COMMENT 发布商号id,data varchar(1000) NOT NU…

SQL 附加数据库时出现 无法打开物理文件错误

错误信息: 执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo) ------------------------------ 无法打开物理文件 "D:\SqlDataBase\Test.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server,错误…

Flash网页游戏辅助工具制作简析

《热血三国》好像是比较热,玩的人也挺多的,年前一个朋友希望能让我写一个这个游戏的外挂,也出于无聊,所以去玩了一下,谁知道一玩就有点喜欢这个游戏了,当然玩归玩,东西还是要做地,当…

sqlserver2008导出mysql_SQLserver 2008将数据导出到Sql脚本文件的方法

请看下面的操作图解。1.使用Sql Server Management Studio 2008 连接数据库。2.选中要导出数据的数据库节点,点鼠标右键,在菜单中选择“任务”->“生成脚本”,如图:3。在弹出的界面中,点2次“下一步”进入如图界面中…

opencv配置_Opencv在vs2012下的配置

别问我为什么记录这么老的版本,问就是因为老师推荐和因为怕自己再次把小米的搜索框给忘记了,又找个好几十分钟的【环境变量】。另外,要敲敲自己的脑袋,作为小米电脑的老用户怎么可以把搜索框给忘记了呢?第一步&#xf…

php7安装mysqli扩展_Ubuntu14版本下无法使用php7.2版本的bcmath扩展

在使用如下命令安装bcmath扩展的时候sudo apt-add-repository ppa:ondrej/phpsudo apt-get updatesudo apt-get install php7.2-bcmath提示如下信息Reading package lists... DoneBuilding dependency tree Reading state information... DoneE: Unable to locate packag…

input 0.1无法相加_你真的知道0.1+0.2为何不等于0.3吗?

打开chrome控制台,给一个特别简单的输入如下:0.1 0.2 // 0.30000000000000004 复制代码不知道你有没有吃惊,这么简单的一个计算,无论在js中还是在python中,都不是准确的0.3,这是为什么呢?缘起要…

python图像增强_Python图像的增强处理操作示例【基于ImageEnhance类】

本文实例讲述了Python图像的增强处理操作。分享给大家供大家参考,具体如下: python中PIL模块中有一个叫做ImageEnhance的类,该类专门用于图像的增强处理,不仅可以增强(或减弱)图像的亮度、对比度、色度&…

python 二项分布_二项分布的理论基础、应用及Python实践

二项分布是概率统计中非常基础、非常实用的一种分布,可以说它在我们的生活中无所不在。它说明了这样一种现象:在给定的试验次数中,某一结果会发生多少次。比如:这个月有多少天会刮北风?今年有多少天会下雨?…

python网络爬虫_python小知识,基于Python 的网络爬虫技术分析

在现阶段大数据的时代中,想要实现对数据的获取和分析,要先具备足够的数据源,网络爬虫技术就为其数据获取提供了良好的条件,且还能够实现对数据源的目的性采集。在网络爬虫技术应用中,Python 脚本语言的使用十分广泛&am…

maven 整体打包_Spirng boot maven多模块打包不踩坑(示例代码)

本文参考 https://blog.csdn.net/Ser_Bad/article/details/78433340经过实战一次通过。回话不多说,话费不多说,直接上图。项目整体结构:父模块:xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

使用mysql制作学生成绩单_【实例讲解】快速制作学生成绩单

本文由网友潇之骥授权原创直发今天有位学校的老师找我给她作学生成绩单,给的数据如图1:(图1)需要的效果如下:(图2)讲解:要实现这种效果,只要用【邮件合并】这个功能就可以轻松搞定。要用好【邮件合并】这个功能&#x…

c语言 判断一个图是否全连通_基于云平台的全链路大规模网络连通性检测系统详解...

虚拟网络排查问题困难,传统的traceroute等工具很难起到太大作用,大部分情况下都需要到宿主机、混合云网关上抓包来troubleshooting,耗时又费力。有些场景中包的传送路径比较长(如跨域、混合云等),可能丢包的地方比较多&#xff0c…

java对接华为推送服务_华为HMS Core 4.0版本即将来袭:包含新推送服务

据官方消息,在12月27日的HUAWEI Developer Groups(简称HDG)大连活动上,华为消费者云服务HMS运营经理透露HMS Core 4.0版本即将上线,由原来的14项增加至24项核心开放功能,近日即将开放新版本众测,不久之后开发者们将会体…

python xml etree_python解析xml文件之xml.etree.cElementTree和xml.etree.ElementTree区别和基本使用...

1、解析速度:ElementTree在 Python 标准库中有两种实现。一种是纯 Python 实现例如 xml.etree.ElementTree ,另外一种是速度快一点的 xml.etree.cElementTree 。你要记住: 尽量使用 C 语言实现的那种,因为它速度更快,而…

CISSP的成长之路(二十一):用户持有凭证

在51CTO安全频道特别策划的CISSP的成长之路系列的上一篇文章《讲解身份验证过程》里,J0ker给大家介绍了用户验证时所依赖的三种验证要素、密码和密码短语及其安全使用原则。作为技术实施难度和成本最低的用户验证方案,基于密码的用户验证方案广泛应用于我们的日常生…

独家:Havok 发布新的 AI 中间件

独家:Havok 发布新的 AI 中间件 March 23rd, 2009 Alex J. Champandard 2009-3-23,赖勇浩(http://blog.csdn.net/lanphaday)译 原文地址:http://aigamedev.com/middleware/havok-ai-announced 在20日(上周五…