mysql使用sha256密码,MySQL5.6启用sha256_password插件

本文介绍了如何将MySQL5.6的默认加密插件从mysql_native_password切换到更安全的sha256_password。通过修改配置文件、安装MySQL、配置SSL证书并测试新用户登录,确保了安全性的提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、背景:html

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

2、配置过程:mysql

资料:sql

一、从MySQL官网查询到服务器端sha256_password无需显式加载,能够在MySQL配置文件中配置使能。数据库

[mysqld]安全

default-authentication-plugin=sha256_passwordbash

二、据官网描述,要启用插件,须经过ssl方式进行链接,也就是说须要配置相关证书。服务器

实现过程:session

b5680b48cc28af3b69a878a96e05cf4f.png

6113fca26c994efb44fd81998944dd42.png

二、安装MySQL

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

1)basedir datadir port 须要根据本身使用状况配置。

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

898d7e6503adfe357091a555bf71f457.png

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

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

c256eeb5cce778049e7aa1638025c811.png

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

c3f6f6bcfc7d4ac503bb0e26895b035e.png

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

2163c70a01e2a3c6529e0c660e2d6542.png

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

f6009d96581d95beab075f5bdeb4ef6c.png

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

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

2062c07f36858359f62c3c0d28631f9f.png

使用新建立的用户test01登陆数据库,由于test01用户使用了sha256_password,此时是登陆失败的,提示身份验证须要SSL加密。因此要使用了sha256_password插件的用户是须要经过SSL加密的,也就是须要证书的。

27a04331c8203a3b85a0e81784993f4b.png

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

fcc07f1f30d7452a9b6f59593b5cf857.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,执行过程当中须要填写一些内容,如国家、城市、邮箱等根据实际状况填写。

4041962d494d1704f5bf550b627f01d0.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

至此,客户端和服务端证书所有建立完毕,生产八个文件以下:

bbed5317e493e432584ff73ca59f0cfa.png

2)配置证书

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

def481b888c4b4cb3e2ae8a14d409dd3.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开启服务

4922bd5e577b732207a5e413a17d70f7.png

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

cb87c14f5441b416df136a2e73d9b78f.png

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

测试:

一、上面步骤中,在数据库中建立了以sha256_password加密的test01用户,密码为password。此时咱们用通常的方式链接确定会报错

69b4d53bab2af31b021e19d233a19b6d.png

二、使用开启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

f0604bb4076594bf19dcfdf0ec607949.png

三、当前系统中的root用户仍是mysql_native_password的加密方式,若是要想将root的加密方式修改的话执行:

use mysql;

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

结果以下:

32a2ebbe639b2564343905ce55be77cc.png

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

13ef700242c75cd75b0f95f5f40ec0b3.png

使用ssl方式链接失败了,可是使用空密码(直接回车)登陆是成功的

7f386233a2a61cd1718f4daaeb1b79ab.png

71b442de4e7b8e9f31d3ba3ee421eefc.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字段的值依旧是空串。

6d3413612f387849d9dfa3d4eaf279f5.png

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

378f6e09232afb47a86c760785c7b3c8.png

附上个人my.ini

ec00f61ef2f4489fa1e72f23.html

ec00f61ef2f4489fa1e72f23.html

# 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值