msyql (8.4,9.0) caching_sha2_password 转换 mysql_native_password用户认证

mysql 前言

caching_sha2_password 主要特性

用于增强用户账户密码的存储和验证安全性。这种插件利用 SHA-256 散列算法的变体来存储和验证密码

  • 安全的密码散列caching_sha2_password 使用基于 SHA-256 的算法来生成密码的散列值。这意味着即使数据库被未授权访问,攻击者也很难从散列值逆向推导出原始密码。

  • 动态盐值: 在散列过程中,使用随机生成的盐值来进一步增强密码的安全性。盐值是在每个散列操作中动态生成的,增加了暴力破解的难度。

  • 内存缓存: 插件在内存中缓存最近的登录尝试,以提高性能。这避免了在每个登录尝试时都需要重新计算密码散列值,从而提高了登录速度。

  • 安全性增强: 由于使用了更安全的散列算法和动态盐值,caching_sha2_password 提供了比旧的 mysql_native_password 插件更好的安全性。它还要求使用安全连接或 RSA 密钥对进行未加密连接上的密码交换,以防止中间人攻击。

mysql_native_password 主要特性

是 MySQL 中用于用户身份验证的一种插件,它是 MySQL 5.7 及更早版本中的默认身份验证插件。此插件使用了一种基于挑战-响应(challenge-response)机制的本地验证方法,其中密码被散列并存储在数据库的 mysql.user 表中。

散列过程 在 mysql_native_password 插件中,密码的散列过程涉及 SHA-1(Secure Hash Algorithm 1)算法。当用户创建或更改密码时,MySQL 会将密码散列两次,然后将结果存储在 mysql.user 表的 authentication_string 字段中。具体步骤如下:

  • 第一次散列:使用 SHA-1 对密码进行散列。
  • 第二次散列:将第一次散列的结果作为输入再次进行 SHA-1 散列,产生最终的散列值。

登录验证 当用户尝试登录时,MySQL 会执行以下步骤进行验证:

  • 使用相同的散列过程对用户提供的密码进行散列。
  • 将生成的散列值与存储在 mysql.user 表中的散列值进行比较。
  • 如果散列值匹配,则允许用户登录;如果不匹配,则拒绝登录。

安全性考量

虽然 mysql_native_password 插件提供了基本的安全保障,但由于使用了 SHA-1 散列算法,其安全性已经受到质疑。SHA-1 的碰撞攻击已经变得可行,这意味着两个不同的输入可能产生相同的散列值,这会降低密码的安全性。

设置身份认证

  • 身份验证插件参考
  • mysql_native_password 官网在新版8.4,9.0 不建议在使用 参考
  • 基于之前使用的密码哈希方法 引入可插拔身份验证 mysql_native_password 参考
  • my.cnf 配置文件增加mysql_native_password=ON 开启,需要关闭的OFF即可
  • 初始化root用户密码,root 远程登录权限 ,mysql_native_password用户日志
  • 创建用户密码dbadmin/dbadmin@123管理权限,mysql_native_password用户日志
  • 创建备份用户backup/backup@123 用户数据库备份,mysql_native_password用户日志
#Define MYSQL path variables
mysql_user=mysqlmysql_user_root=root
mysql_user_password=root@123mysql_user_dba=dbadmin
mysql_user_dba_password=dbadmin@123mysql_user_backup=backup
mysql_user_backup_password=backup@123mysql_data_database=mysql_data
DATA_CATALOGUE=/data#初始化root 密码,使用mysql_native_password认证
mysql -S $DATA_CATALOGUE/$mysql_data_database/$mysql_sock -p`cat /var/log/mysql.log | grep 'password is generated' | awk '{print $NF}'` --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$mysql_user_password'; flush privileges;"#赋予root 远程登录权限
mysql -u"$mysql_user_root" -p"$mysql_user_password" -e "use $mysql_user; update user set host = '%' where user = 'root'; FLUSH PRIVILEGES; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '$mysql_user_password';"#创建用户backup 用户,使用mysql_native_password认证
mysql -u"$mysql_user_root" -p"$mysql_user_password" -e "CREATE USER '$mysql_user_backup'@'%' IDENTIFIED WITH mysql_native_password BY '$mysql_user_backup_password'; GRANT SELECT, PROCESS, RELOAD, LOCK TABLES ON *.* TO '$mysql_user_backup'@'%'; FLUSH PRIVILEGES;"#创建DBA用户,使用mysql_native_password认证
mysql -u"$mysql_user_root" -p"$mysql_user_password" -e "CREATE USER '$mysql_user_dba'@'%' IDENTIFIED WITH mysql_native_password BY '$mysql_user_dba_password'; GRANT ALL PRIVILEGES ON *.* TO '$mysql_user_dba'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"

mysql 备份脚本

  • 数据库所有库备份
  • 数据备份位置/data/backup
vim /mysql_backup.sh
#!/bin/bash
# -*- coding: utf-8 -*-
# Author: make.han 
# Email:CIASM@CIASM
# Date: 2024/07/18
# mysql backup #Setting a Backup Directory
BACKUP_DIR="/data/backup"# Example Set the MySQL login information
MYSQL_USER="backup"
MYSQL_PASSWORD="backup@123"# Ensure the backup directory exists
if [ ! -d "$BACKUP_DIR" ]; thenmkdir -p "$BACKUP_DIR"
fi# Current date and time, used to name the backup file
DATE=$(date +%Y%m%d-%H%M%S)# Run all the mysqldump command
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases --single-transaction > "$BACKUP_DIR/ciasmall_db_backup_$DATE.sql"# Single library backup
#mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --single-transaction $MYSQL_data > "$BACKUP_DIR/ciasm_db_backup_$DATE.sql"# Check whether the backup file is successfully created
if [ $? -eq 0 ]; thenecho "Backup completed successfully."
elseecho "Backup failed."
fi

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

地图项目涉及知识点总结

序:最近做了一个在地图上标记点的项目,用户要求是在地图上显示百万量级的标记点,并且地图仍要可用(能拖拽,能缩放)。调研了不少方法和方案,最终实现了相对流畅的地图系统,加载耗时用…

spring-boot 整合 redisson 实现延时队列(文末有彩蛋)

应用场景 通常在一些需要经历一段时间或者到达某个指定时间节点才会执行的功能,比如以下这些场景: 订单超时提醒收货自动确认会议提醒代办事项提醒 为什么使用延时队列 对于数据量小且实时性要求不高的需求来说,最简单的方法就是定时扫描数据…

【IEEE出版】第四届能源工程与电力系统国际学术会议(EEPS 2024)

第四届能源工程与电力系统国际学术会议(EEPS 2024) 2024 4th International Conference on Energy Engineering and Power Systems 重要信息 大会官网:www.iceeps.com 大会时间:2024年8月9-11日 大会…

S7-1200PLC使用西门子报文 111 和 FB38002(Easy_SINA_Pos)实现V90 PN总线伺服定位控制

1、博途1200/1500 PLC V90 PN通信 博途1200/1500PLC V90 PN通信控制 (FB284功能块)_fb284功能块文档说明-CSDN博客文章浏览阅读7k次。先简单说下如何获取FB284,一般有2种方法,Startdrive软件可以操作大部分西门子的驱动器,建议安装调试方便,缺点就是软件太大。_fb284功能…

安装anaconda后jupyter notebook打不开 闪退

首先,通过清华源安装了最新的anaconda(安装在了D盘) 尝试打开jupyter,发现小黑框1s后自己关了,根本不打开浏览器 之后尝试按照这个做了一遍https://blog.csdn.net/gary101818/article/details/123560304还是不行。。…

Jmeter性能测试(九)

一、Jmeter性能测试需要特别注意的地方 1、参数化 2、请求参数 3、BeanShell 预处理程序更新jmeter请求参数 4、接口中不可重复的随机数处理 5、线程组设置 6、总结 二、参数化 1、参数化配置,多个参数用英文逗号隔开 2、wallet参数化文件,不要写表头,多个参数用英文逗号…

二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root [] 输出:[] 示例 3:…

鸿蒙开发入门——ArkTS语法简介(万字简介)

ArkTS 作为鸿蒙开发的编程语言,我们先来一图看看这个语言,我们可以看到ArkTS是在TS(TypeScript)的基础上改造的,而TS又是在JS(JavaSript)上改造的,一句话总结就是ArkTS是TS的超集&a…

新版本 idea 创建不了 spring boot 2 【没有jkd8选项】

创建新项目 将地址换成如下 https://start.aliyun.com/

HackQuest介绍 web3 学习平台

HackQuest 官网地址: https://www.hackquest.io/zh HackQuest是一个专注于Web3技术教育的在线学习平台,旨在帮助全球开发者掌握区块链、加密货币和去中心化应用(DApps)领域的最新技能。该平台汇聚了超过14000名活跃开发者&#…

C学习(数据结构)-->单链表习题

目录 一、环形链表 题一:环形链表 思路: 思考一:为什么? 思考二:快指针一次走3步、4步、......n步,能否相遇 step1: step2: 代码: 题二: 环形链表 I…

区块链技术在溯源领域的应用

区块链技术具有去中心化、不可篡改、可追溯等特点,使其在溯源领域具有广阔的应用前景。具体而言,区块链技术可以应用于以下几个方面。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 产品溯源 产品溯源是指…

Nginx的核心功能

1. Nginx的核心功能 1.1 nginx反向代理功能 正向代理 代理的为客户端,对于服务器不知道真实客户的信息。例如:翻墙软件 反向代理服务器 代理的为服务器端。对于客户来说不知道服务器的信息。例如:nginx 项目部署图 web项目部署的虚拟机和Ng…

【linux】服务器安装NVIDIA驱动

【linux】服务器安装NVIDIA驱动 【创作不易,求点赞关注收藏】😀 文章目录 【linux】服务器安装NVIDIA驱动一、关闭系统自带驱动nouveau二、下载英伟达驱动三、安装英伟达驱动1、禁用X服务器和相关进程2、在TTY终端安装驱动3、验证是否安装成功4、重新启…

HarmonyOS根据官网写案列~ArkTs从简单地页面开始

Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…

Spring循环依赖与三级缓存

Spring循环依赖是指两个或多个Bean相互依赖,导致Spring无法在不部分实例化这些Bean的情况下完成它们的创建。在Spring框架中,为了解决循环依赖问题,Spring使用了三级缓存机制。 假设BeanA依赖BeanB,BeanB依赖BeanA,Spr…

Nginx详解(超级详细)

目录 Nginx简介 1. 为什么使用Nginx 2. 安装Nginx Nginx的核心功能 1. Nginx反向代理功能 2. Nginx的负载均衡 3 Nginx动静分离 Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协…

2-35 基于matlab的四足液压机器人设计程序

基于matlab的四足液压机器人设计程序,界面化例程,输入液压机器人结构参数,输出液压缸的行程、推力和速度。程序已调通,可直接运行。 2-35 四足液压机器人 液压机器人结构参数 - 小红书 (xiaohongshu.com)

Postman、Apifox、Apipost用哪个?

Postman、Apifox、Apipost都是流行的API接口管理工具,它们各自具有不同的特点和优势,因此哪个更好用取决于具体的使用场景和需求。以下是对这三个工具的比较分析: 一、Postman 特点与优势: 支持多种请求方式:包括GE…

基于Python+Django+MySQL的心理咨询预约系统

心理咨询预约系统 DjangoMySQL 基于PythonDjangoMySQL的心理咨询预约系统 项目主要依赖Django3.2,MySQL 支持随机验证码生成与登录验证 简介 基于PythonDjangoMySQL的心理咨询预约系统通过连接数据库获取数据,登录新增随机数字验证码验证。具体可以看…