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

news/2024/9/7 4:46:40 标签: mysql, 数据库

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=mysql

mysql_user_root=root
mysql_user_password=root@123

mysql_user_dba=dbadmin
mysql_user_dba_password=dbadmin@123

mysql_user_backup=backup
mysql_user_backup_password=backup@123

mysql_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" ]; then
    mkdir -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 ]; then
    echo "Backup completed successfully."
else
    echo "Backup failed."
fi

http://www.niftyadmin.cn/n/5568328.html

相关文章

银行业务知识全篇(财务知识、金融业务知识)

第一部分 零售业务 1.1 储蓄业务 4 1.1.1 普通活期储蓄(本外币) 4 1.1.2 定期储蓄(本外币) 5 1.1.3 活期一本通 9 1.1.4 定期一本通 10 1.1.5 电话银行 11 1.1.6 个人支票 11 1.1.7 通信存款 13 1.1.8 其他业务规…

scikit-learn库学习之LassoCV模块

scikit-learn库学习之LassoCV模块 一、简介 LassoCV是scikit-learn库中用于线性回归的模块。它通过交叉验证来选择Lasso回归模型的最佳正则化参数。Lasso回归是一种线性回归,它使用L1正则化来防止过拟合并选择重要特征。 二、语法和参数 from sklearn.linear_mod…

Maven使用(依赖管理和继承聚合特性)

Maven是什么?Maven的主要作用是什么? Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 想理解Maven的概念&#…

解决Element UI 表格组件懒加载数据刷新问题

一、问题描述 element ui的table组件设置成懒加载时,遇到数据表格需要更新、删除等操作,子节点不会自动更新。 二、解决思路 刷新数据,就是重新调用load(),通过map记录已展开的节点,需要刷新…

Linux(CentOS7)部署PHP-7.2.17源码包

PHP-7.2.17源码包部署 安装php1. 解压并进入php-7.2.17文件夹2. 编写php.sh脚本3. 执行php.sh 配置Apache与PHP1. 编写httpd.conf配置文件2. 编写php测试脚本 部署HTTPD-2.4.37源码包点击跳转 部署MySQL-5.6.31源码点击跳转 下载源码包和依赖的源码包,资源见文章顶…

泰迪智能科技携手广东东软学院共建实践教学基地

7月17日,广东东软学院实践教学基地揭牌仪式在广东泰迪智能科技股份有限公司产教融合实训中心举行,广东东软学院商务管理学院副院长彭四平、专业教授马世登、专业老师许艳、专业老师吴量婷、泰迪智能科技董事长张良均、运营中心总监翁梦婷、校企合作经理吴…

Composition API实现逻辑复用

抽离逻辑代码到一个函数函数命名约定为useXxxx格式(react Hooks也是)在setup中去引用这个函数 如下经典鼠标位置例子: // useMousePosition.ts import { onMounted, onUnmounted, ref } from "vue";const useMousePosition () &…

n7.Nginx 第三方模块

Nginx 第三方模块 第三模块是对nginx 的功能扩展,第三方模块需要在编译安装Nginx 的时候使用参数–add-modulePATH指定路径添加,有的模块是由公司的开发人员针对业务需求定制开发的,有的模块是开 源爱好者开发好之后上传到github进行开源的模…