MySQL系列之身份鉴别(安全)

导览

  • 前言
  • Q:如何保障MySQL数据库身份鉴别的有效性
  • 一、有效性检查
    • 1. 用户唯一
    • 2. 启用密码验证
    • 3. 是否存在空口令用户
    • 4. 是否启用口令复杂度校验
    • 5. 是否设置口令的有效期
    • 6. 是否限制登录失败尝试次数
    • 7. 是否设置(超过尝试次数)锁定的最小时长
    • 8. 是否设置保持登录的有效期
  • 二、应对方案
    • 1. 空口令问题
    • 2. 口令复杂度
      • 2.1 安装插件
      • 2.2 参数解释
        • 2.2.1 validate_password_policy
        • 2.2.2 配套参数
      • 2.3 调整参数
    • 3. 口令有效期
    • 4. 设置登录失败处理
      • 4.1 安装插件
      • 4.2 参数解释
      • 4.3 调整参数
    • 5. 设置登录保持时间
  • 结语
  • 精彩回放

前言

MySQL的身份鉴别是数据库安全的核心命题之一。在每日“拧螺丝”的工作中,我们的开发人员可能会忽略这个问题。正因如此,博主以这个契机,向大家做一次专题介绍。看过此文,相信你能够“上应付得了等保,下对得起公司”

在这里插入图片描述

Q:如何保障MySQL数据库身份鉴别的有效性

提示:本文示例均已MySQL5.7为例,通过root用户执行相关命令。

如何保障MySQL数据库身份鉴别,有很多手段进行识别。博主通过SQL的方式,进行逐一介绍。

一、有效性检查

1. 用户唯一

检查授权的用户是否唯一:

SELECT USER, HOST FROM mysql.user;

2. 启用密码验证

检查PLUGIN是否包含*_password

-- mysql_native_password,身份验证插件
SELECT USER, HOST, PLUGIN FROM mysql.user;

3. 是否存在空口令用户

检查authentication_string是否存在空值:

-- authentication_string,加密后密码,即执行password()后的值
SELECT USER, HOST, PLUGIN, authentication_string FROM mysql.user;

4. 是否启用口令复杂度校验

检查validate_password插件,是否已启用:

-- 如果为空,证明未启用该插件
SHOW VARIABLES LIKE 'validate%';

5. 是否设置口令的有效期

-- 默认0,永不过期
SHOW VARIABLES LIKE '%default_password_lifetime%';

6. 是否限制登录失败尝试次数

-- 如为空,代表未设置,可无限尝试
SHOW VARIABLES LIKE '%connection-control-failed-connections-threshold%';

7. 是否设置(超过尝试次数)锁定的最小时长

-- 如为空,代表未设置,永不锁定
SHOW VARIABLES LIKE '%connection-control-min-connection-delay%';

8. 是否设置保持登录的有效期

-- 默认0,代表永不退出登录
SHOW VARIABLES LIKE '%wait_timeout%';

二、应对方案

针对第一部分的有效性检查中,涉及不满足的配置项,我们可以通过以下措施加以弥补。

1. 空口令问题

如存在空口令,可通过root执行以下命令:

alter user [USER]@[HOST] identified by '[PASSWORD]';

2. 口令复杂度

如未启用口令复杂度,可能会遇到暴力破解,因此建议设置相关项。

2.1 安装插件

MySQL默认预留了口令复杂度插件:validate_password。我们只需要通过root用户安装即可:

INSTALL PLUGIN validate_password SONAME 'validate_password.so';

查看是否安装成功(如看到以下记录,代表成功):

SHOW VARIABLES LIKE 'validate%';

在这里插入图片描述

2.2 参数解释

为加深各位盆友的理解,博主对返回的参数加以说明。

2.2.1 validate_password_policy

MySQL的密码策略包含以下3种:
LOW 或 0
代表密码必须满足指定长度。
MEDIUM 或 1(默认)
代表密码必须至少包含1个大写字母、1个小写字母、1个数字和1个特殊字符。
STRONG 或 2
在满足MEDIUM的基础上,不允许存储在字典文件(dictionary file)中。

2.2.2 配套参数
参数名称用途
validate_password_length定义密码长度,默认8位,适用于LOW 策略。
validate_password_mixed_case_count定义大、小写字母的个数,默认1,适用于非LOW策略。
validate_password_number_count定义数字的个数,默认1,适用于非LOW策略。
validate_password_special_char_count定义特殊字符的个数,默认1,适用于非LOW策略。

2.3 调整参数

掌握了参数特征后,我们可以按需调整相关参数的值,以满足安全需要,执行命令如下:

--必须以root身份执行,且拥有super权限。
set global [具体参数名称]=[VALUE];

3. 口令有效期

如满足口令定期更换的安全要求时,必须设置口令的有效期:

-- 必须以root身份执行,设置有效期为90天
set global default_password_lifetime=90;

4. 设置登录失败处理

假如要求你限制登录失败的次数以及失败次数达到上限后锁定用户,你该怎么办?先不急,且听博主分解。

4.1 安装插件

满足上述要求,需要安装MySQL自带的插件:connection_control,命令如下:

-- 必须以root身份执行
INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';

4.2 参数解释

参数名称用途
connection_control_failed_connections_threshold登录失败尝试次数,默认3,如0代表不限制。
connection_control_max_connection_delay登录失败次数满后,再次响应的最大延迟时间(毫秒),建议默认
connection_control_min_connection_delay登录失败次数满后,再次响应的最小延迟时间(毫秒)。

4.3 调整参数

掌握了参数特征后,我们同样可以按需调整相关参数的值,执行命令如下:

--必须以root身份执行,且拥有super权限。
set global [具体参数名称]=[VALUE];

5. 设置登录保持时间

设置保持登录的有效期,过期自动退出登录状态:

-- 必须以root身份执行,设置保持登录的有效期为1800秒
set global wait_timeout=1800;

结语

本文通过案例介绍的方式,针对MySQL不同的安全场景,制定差异化的解决办法。当然完成该过程离不开MySQL自带的插件或访问控制能力。
走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~


精彩回放


MySQL系列之数据授权(privilege)
MySQL系列之如何在Linux只安装客户端
MySQL系列之如何正确的使用窗口函数(基于8.0版本)
MySQL系列之数据导入导出
MySQL系列之索引入门(上)
MySQL系列之索引入门(下)


在这里插入图片描述

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

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

相关文章

MySQL面试题补

内连接和外连接的区别: ○1.功能和用法不同:内连接是连接两表都满足情况的数据;而外连接是以一边的表为主表,另一个表只显示匹配的行; ○2.用途:内连接一般是用于检索不同表需要根据共同的列值进行匹配的&a…

线程(三)【线程互斥(下)】

目录 4. 互斥锁4.1 解决数据不一致问题 5. 锁的原理5.1 加锁5.2 解锁 6. 可重入 vs 线程安全 4. 互斥锁 NAMEpthread_mutex_destroy, pthread_mutex_init - destroy and initialize a mutex // 创建、释放锁SYNOPSIS#include <pthread.h>// pthread_mutex_t: 线程库提供…

如何使用AWS Lambda构建一个云端工具(超详细)

首发地址&#xff08;欢迎大家访问&#xff09;&#xff1a;如何使用AWS Lambda构建一个云端工具&#xff08;超详细&#xff09; 1 前言 1.1 无服务器架构 无服务器架构&#xff08;Serverless Computing&#xff09;是一种云计算服务模型&#xff0c;它允许开发者构建和运行…

网络爬虫总结与未来方向

通过深入学习和实际操作&#xff0c;网络爬虫技术从基础到进阶得以系统掌握。本节将全面总结关键内容&#xff0c;并结合前沿技术趋势与最新资料&#xff0c;为开发者提供实用性强的深度思考和方案建议。 1. 网络爬虫技术发展趋势 1.1 趋势一&#xff1a;高性能分布式爬虫 随…

实验十三 生态安全评价

1 背景及目的 生态安全是生态系统完整性和健康性的整体反映&#xff0c;完整健康的生态系统具有调节气候净化污染、涵养水源、保持水土、防风固沙、减轻灾害、保护生物多样性等功能。维护生态安全对于人类生产、生活、健康及可持续发展至关重要。随着城市化进程的不断推进&…

archlinux安装waydroid

目录 参考资料 注意 第一步切换wayland 第二步安装binder核心模组 注意 开始安装 AUR安裝Waydroid 启动waydroid 设置网络&#xff08;正常的可以不看&#xff09; 注册谷歌设备 安装Arm转译器 重启即可 其他 参考资料 https://ivonblog.com/posts/archlinux-way…

鸿蒙NEXT开发案例:随机数生成

【引言】 本项目是一个简单的随机数生成器应用&#xff0c;用户可以通过设置随机数的范围和个数&#xff0c;并选择是否允许生成重复的随机数&#xff0c;来生成所需的随机数列表。生成的结果可以通过点击“复制”按钮复制到剪贴板。 【环境准备】 • 操作系统&#xff1a;W…

【Android】Service使用方法:本地服务 / 可通信服务 / 前台服务 / 远程服务(AIDL)

1 本地Service 这是最普通、最常用的后台服务Service。 1.1 使用步骤 步骤1&#xff1a;新建子类继承Service类&#xff1a;需重写父类的onCreate()、onStartCommand()、onDestroy()和onBind()方法步骤2&#xff1a;构建用于启动Service的Intent对象步骤3&#xff1a;调用st…

【LeetCode热题100】队列+宽搜

这篇博客是关于队列宽搜的几道题&#xff0c;主要包括N叉树的层序遍历、二叉树的锯齿形层序遍历、二叉树最大宽度、在每个数行中找最大值。 class Solution { public:vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;if(!root) …

双因子认证:统一运维平台安全管理策略

01双因子认证概述 双因子认证&#xff08;Two-Factor Authentication&#xff0c;简称2FA&#xff09;是一种身份验证机制&#xff0c;它要求用户提供两种不同类型的证据来证明自己的身份。这通常包括用户所知道的&#xff08;如密码&#xff09;、用户所拥有的&#xff08;如…

Apple Vision Pro开发002-新建项目配置

一、新建项目 可以选择默认的&#xff0c;也可以选择Universal 3D 二、切换打包平台 注意选择Target SDK为Devices SDk&#xff0c;这种适配打包到真机调试 三、升级新的Input系统 打开ProjectSettings&#xff0c;替换完毕之后引擎会重启 四、导入PolySpatial 修改上图红…

瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇

RA6807是RA8876M的缩小版&#xff0c;具备RA8876M的所有功能&#xff0c;只将MCU控制接口进行缩减&#xff0c;仅保留SPI-3和I2C接口&#xff0c;其它功能基本相同。 该芯片最大可控制854x600的分辨率&#xff0c;内建64Mbits显存&#xff0c;多个图层&#xff0c;使用起来相当…

机器人SLAM建图与自主导航:从基础到实践

前言 这篇文章我开始和大家一起探讨机器人SLAM建图与自主导航 &#xff0c;在前面的内容中&#xff0c;我们介绍了差速轮式机器人的概念及应用&#xff0c;谈到了使用Gazebo平台搭建仿真环境的教程&#xff0c;主要是利用gmapping slam算法&#xff0c;生成一张二维的仿真环境…

一篇保姆式centos/ubuntu安装docker

前言&#xff1a; 本章节分别演示centos虚拟机&#xff0c;ubuntu虚拟机进行安装docker。 上一篇介绍&#xff1a;docker一键部署springboot项目 一&#xff1a;centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest doc…

Robot | 用 RDK 做一个小型机器人(更新中)

目录 前言架构图开发过程摄像头模型转换准备校准数据使用 hb_mapper makertbin 工具转换模型 底版开发 结语 前言 最近想开发一个小型机器人&#xff0c;碰巧看到了 RDK x5 发布了&#xff0c;参数对于我来说非常合适&#xff0c;就买了一块回来玩。 外设也是非常丰富&#xf…

如何在 UniApp 中实现 iOS 版本更新检测

随着移动应用的不断发展&#xff0c;保持应用程序的更新是必不可少的&#xff0c;这样用户才能获得更好的体验。本文将帮助你在 UniApp 中实现 iOS 版的版本更新检测和提示&#xff0c;适合刚入行的小白。我们将分步骤进行说明&#xff0c;每一步所需的代码及其解释都会一一列出…

软件工程导论 选填题知识点总结

一 原型化方法是一种动态定义需求的方法&#xff0c;提供完整定义的需求不是原型化方法的特征&#xff0c;其特征包括尽快建立初步需求、简化项目管理以及加强用户参与和决策。 软件危机的表现包括用户对已完成的软件系统不满意的现象经常发生、软件产品的质量往往靠不住、软件…

软件测试面试之常规问题

1.描述一下测试过程 类似题目:测试的生命周期 思路:这是一个“范围”很大的题目&#xff0c;而且回答时间一般在3分钟之内&#xff0c;不可能非常详细的描述整个过程&#xff0c;因此答题的思路要从整体结构入手&#xff0c;不要过细。为了保证答案的准确性&#xff0c;可以引…

Linux|内存级文件原理

目录 进程与文件 Linux下的文件系统 文件操作&#xff0c;及文件流 C语言函数 文件流 文件描述符 系统调用操作 系统调用参数 重定向与文件描述符 输出重定向 输入重定向 文件内容属性 Linux下一切皆文件 进程与文件 当我们对文件进行操作时&#xff0c;文件必须…

洛谷 P1722 矩阵 II C语言 记忆化搜索

题目&#xff1a; https://www.luogu.com.cn/problem/P1722 我们按照案例画一下 我们会发现&#xff0c;会出现重复的子结构。 代码如下&#xff1a; #include<iostream> using namespace std; int mem[300][300]; int n; int f[305][305]; int dfs(int x,int red,…