Mysql安全之基础合规配置

news2025/1/16 19:50:26

一、背景

某次某平台进行安全性符合型评估时,列出了数据库相关安全选项,本文特对此记录,以供备忘参考。

二、安全配置

2.1、数据库系统登录时的用户进行身份标识和鉴别;

1)对登录Mysql系统用户的密码复杂度是否有要求?

即需要满足密码复杂度要求,至少8位长度,大小写各1个,数字2个,特殊字符至少1个,密码有效期3个月。现场版本5.7.34;Mysql 5.6后自带validate_password.so插件(windows为validate_password.dll)

//检查是否启用命令,如果啥也没返回,就是没启用
mysql> SHOW VARIABLES LIKE 'validate_password%';
mysql> SELECT * from mysql.plugin ;
mysql> show plugins;

#安装插件
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so'; #Linux
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.dll';  #windows

#验证
mysql> SELECT * from mysql.plugin ;

#创建一个名为password_policy的新表,用于存储密码策略的相关信息
CREATE TABLE password_policy (
  id INT PRIMARY KEY AUTO_INCREMENT,
  uppercase_required BOOLEAN NOT NULL,  #至少一个大写字母
  lowercase_required BOOLEAN NOT NULL,  #至少一个小写字母
  number_required BOOLEAN NOT NULL,     #至少一个数字
  special_character_required BOOLEAN NOT NULL,  #至少一个特殊字符
  min_length INT NOT NULL   #密码的最小长度
);

在这里插入图片描述
完成后修改配置文件写入:

plugin-load-add=validate_password.so
validate-password=ON
validate_password_policy = 1   ##0(LOW), 1 (MEDIUM), 2 (STRONG)
validate_password_length = 8
validate_password_mixed_case_count = 1  #大小写字符长度,至少1个
validate_password_number_count = 2
validate_password_special_char_count = 1  #特殊字符至少1个
default_password_lifetime=180
password_history=6   #能选择最近使用过的6个密码
password_reuse_interval=365  #设置不能选择最近一年内的密码

#验证测试密码符合度
SELECT VALIDATE_PASSWORD_STRENGTH('Ad32weak$_@123');

在这里插入图片描述

规则说明:详情参看官网说明:

策略检查规则
0 or LOWLength(满足长度要求)
1 or MEDIUMLength; numeric, lowercase/uppercase, and special characters
2 or STRONGLength; numeric, lowercase/uppercase, and special characters; dictionary file

创建触发器:每次插入或更新用户密码时检查密码复杂度

CREATE TRIGGER check_password_complexity
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
  DECLARE password_complexity_error VARCHAR(255) DEFAULT NULL;
  IF NEW.password REGEXP '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$' = 0
  THEN
    SET password_complexity_error = 'Password must contain at least one uppercase letter, one lowercase letter, one number, one special character, and have a minimum length of 8 characters.';
  END IF;
  IF password_complexity_error IS NOT NULL 
  THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = password_complexity_error;
  END IF;
END;

说明:上述触发器使用正则表达式(regular expression)检查被插入的新密码(NEW.password)是否满足复杂度要求。正则表达式^(?=.[a-z])(?=.[A-Z])(?=.[0-9])(?=.[!@# %^&*]).{8,} 要求密码至少包含一个小写字母、一个大写字母、一个数字、一个特殊字符(!@#$%^&*),并且密码长度至少为8个字符。另,mysql 5.7 及之后版本的密码保存到 authentication_string 字段中不再使用password 字段。MySQL 8.0 在用户管理方面还增加了角色管理,默认的密码加密方式也做了调整,由之前的 SHA1 改为了 SHA2 ,不可逆 ,同时加上 MySQL 5.7 的禁用用户和用户过期的功能。

2.2 、是否启用ssl:

show variables like '%ssl%';

2.3、最小化权限配置

主要分为:用户管理权限、对象管理权限和SQL执行权限。最小化权限原则是指,只授权用户所必需的权限,并且要尽可能地限制其权限范围。

#创建只读用户
mysql> GRANT SELECT ON database_name.* TO 'OR_user'@'localhost' IDENTIFIED BY 'password';

#去除删除权限,须用户重新登录后才能生效
mysql> REVOKE DROP ON database_name.* FROM 'dbadmin'@'localhost';
mysql> REVOKE SELECT,INSERT,UPDATE,DELETE ON mysql.* FROM 'dbadmin'@'localhost';

#限制用户操作的表和字段
mysql> GRANT SELECT (name, age) ON rsms.user TO 'test'@'localhost' IDENTIFIED BY 'password';

#创建一个名为“user_acl”的视图,只能查询名为“user”的表中“name”和“age”字段,可以使用以下命令:

mysql> CREATE VIEW user_acl AS SELECT name,age FROM user;

#验证
mysql> SHOW GRANTS FOR CURRENT_USER();
mysql> SHOW GRANTS FOR 'user'@'主机地址' ;
mysql> SELECT host,user,authentication_string,select_priv,insert_priv,drop_priv  
FROM mysql.user;

2.4、权限分级配置

权限分级原则是指,根据用户角色或职责的不同,对其进行权限分级管理,避免数据被未经授权的用户访问和操作。

#8.0中创建角色
mysql> CREATE ROLE 'role_name'[@'host_name'] [,'role_name'[@'host_name']]……
mysql> GRANT role [,role2,...] TO user [,user2,...];
mysql> REVOKE role FROM user;  #撤销用户的角色
#验证
mysql> SELECT CURRENT_ROLE();

#激活角色,激活4个
mysql> SET DEFAULT ROLE ALL TO  
'admin'@'localhost',  
'read_user1'@'localhost',  
'read_user2'@'localhost',  
'rw_user1'@'localhost';

#临时配置角色
mysql> SET PERSIST mandatory_roles = 'role1,role2@localhost,rw_user1@%'; #系统重启后仍然有效  
mysql> SET GLOBAL mandatory_roles = 'role1,role2@localhost,rw_user1@%'; #系统重启后失效
#写到配置文件里,固定
[mysqld]  
mandatory_roles='role1,role2@localhost,rw_user1@%'


#验证
mysql> show variables like 'activate_all_roles_on_login';  

#对所有角色永久激活
mysql> SET GLOBAL activate_all_roles_on_login=ON;

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

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

相关文章

MYSQL报错 [ERROR] InnoDB: Unable to create temporary file; errno: 0

起因 服务器的mysql不支持远程访问,在修改完相关配置后重启服务出错。 2023-12-03T10:12:23.895459Z 0 [Note] C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe (mysqld 5.7.22-log) starting as process 15684 ... 2023-12-03T10:12:23.908886Z 0 [Note…

TimiGP细胞互作算法

介绍: 通过推断细胞间相互作用和免疫细胞预后价值来研究时间的计算方法。我们的方法将存活统计数据与批量转录组学图谱相结合,以构建免疫细胞-细胞相互作用网络,其中边缘(例如,X → Y)表明高 X/Y 比值与良…

unity学习笔记17

一、动画组件 Animation Animation组件是一种更传统的动画系统,它使用关键帧动画。你可以通过手动录制物体在时间轴上的变换来创建动画。 一些重要的属性: 1. 动画(Animation): 类型: Animation组件允许…

React如何检查组件性能

可以使用Profiler来查看组件的渲染速度 Profiler的基本使用 需要将<Profiler>标签包裹在需要检查渲染速度的组件外部需要绑定id属性&#xff0c;该属性是唯一标识&#xff0c;用于区分其他Profiler需要onRender函数&#xff0c;该函数一共有六个参数&#xff0c;分别为…

海德汉(HEIDENHAIN)CNC数据采集(可免授权)

一&#xff0c;概述 海德汉 常见的系统一般有530、640系统&#xff0c;采集一般有两种方法&#xff1a; &#xff08;1&#xff09;购买海德汉官方的SDK&#xff0c;HeidenhainDNC COM Component&#xff0c;安装之后有相应的demo&#xff0c;支持的语言有C#、C/C。此方法还需…

蓝桥杯物联网竞赛_STM32L071_8_ADC扩展模块

原理图&#xff1a; 扩展模块原理图&#xff1a; RP1和RP2分别对应着AIN1和AIN2&#xff0c;扭动它们&#xff0c;其对应滑动变阻器阻值也会变化 实验板接口原理图&#xff1a; 对应实验板接口PB1和PB0 即AN1对应PB1, AN2对应PB0 CubMx配置&#xff1a; ADC通道IN8和IN9才对…

牛客在线编程(SQL大厂面试真题)

1.各个视频的平均完播率_牛客题霸_牛客网 ROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time d…

leetcode 142.环形链表2

我来更新 leetcode 题目了&#xff0c;接着上一次&#xff0c;这一次是上一道题目的提升&#xff08;有点数学题的感觉&#xff09; 142.环形链表2 题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表…

物奇平台电容触摸功能调试

是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 物奇平台电容触摸功能调试 1 修改按键驱动宏 2 编译生成wpk 文件,import 导入烧录文件。…

【Vulnhub靶机】w1r3s.v1.0.1-CuppaCMS

文档说明&#xff1a;https://www.vulnhub.com/entry/w1r3s-101,220/ 靶机下载&#xff1a;Download (Mirror): 信息收集 主机发现 -sn 扫描整个C段&#xff0c;不进行端口扫描&#xff0c;只打印可用主机&#xff0c;n代表not port scan sudo nmap -sn 10.9.75.0/24 -oA su…

关于安科瑞预付费系统在转供电情况下的应用-安科瑞 蒋静

1 前言 国家从2018年开始对转供电加价开展规范清理以来&#xff0c;已经出来了一系列政策&#xff0c;不仅包括专门针对转供电问题的政策&#xff0c;18-20年间还在每次降电价政策中突出强调了转供电主体不得截留降价红利的要求。从具体内容看&#xff0c;各地政策都鼓励一户一…

MATLAB 自抗扰控制 - Active Disturbance Rejection Control

系列文章目录 MATLAB 模型参考自适应控制 - Model Reference Adaptive Control 文章目录 系列文章目录前言一、控制器结构1.1 一阶逼近1.2 二阶逼近 二、指定控制器参数参考 前言 自抗扰控制 (ADRC) 是一种无模型控制方法&#xff0c;适用于为具有未知动态特性以及内部和外部…

React使用TailwindCSS

React中使用TailwindCSS TailwindCSS是 下载及初始化 可以查看官网对照自己使用的框架进行配置 npm install -D tailwindcss postcss autoprefixer下载完毕后执行如下命令 npx tailwindcss init -p可以发现项目中多了两个文件 其中默认已经进行了配置&#xff0c;我们需要将…

AR助推制造业智能转型:实时远程协作与可视化引领生产创新

制造商面临着多方面的变革&#xff0c;技术的兴起催生了工业物联网&#xff08;IIoT&#xff09;&#xff0c;改变了现代工厂的外貌、系统和流程。同时&#xff0c;全球竞争压力和不断变化的员工队伍要求采用新的员工培训方法&#xff0c;并重新审视工人在工厂中的角色。尽管如…

C# Spire操作Excel数据透视表

一、概述 数据透视表&#xff08;Pivot Table&#xff09;是一种交互式的表&#xff0c;可以进行某些计算&#xff0c;如求和与计数等&#xff0c;可动态地改变透视表版面布置&#xff0c;也可以重新安排行号、列标和页字段。当改变版面布置时&#xff0c;数据透视表也会按照新…

Matter学习笔记(3)——交互模型

一、简介 1.1 交互方式 交互模型层定义了客户端和服务器设备之间可以执行哪些交互。发起交互的节点称为发起者&#xff08;通常为客户端设备&#xff09;&#xff0c;作为交互的接收者的节点称为目标&#xff08;通常为服务器设备&#xff09;。 节点通过以下方式进行交互&a…

短线买入卖出有哪些交易技巧?

前面两节课&#xff0c;我们认识了短线交易&#xff0c;知道了短线交易常见的买入卖出时机&#xff0c;这节课&#xff0c;我们来讲解一下短线买入卖出的一些交易技巧。话不多时&#xff0c;直接进入重点&#xff01; 一、短线交易要果断 短线波动快&#xff0c;在出现买卖信号…

pytorch 中的dim 的作用范围

1. 二维矩阵时 不同的运算&#xff0c; dim 的作用域都是一样的思想&#xff1b; 当数据是二维矩阵时&#xff0c; 可以按照下面的思想理解&#xff1a; 对于矩阵&#xff1a; dim0 按列操作&#xff08;沿列向下&#xff09;。 dim1 按行操作&#xff08;跨行&#xff09;。 …

6-15 复制字符串

#include<stdio.h> #include<string.h> int main(){int i;char s1[80],s2[80];printf("输入的s2是&#xff1a;");scanf("%s",s2);for(i0;i<strlen(s2);i)s1[i]s2[i];printf("复制后的s1是&#xff1a;%s\n",s1); return 0;}

计算机组成原理-指令格式

文章目录 现代计算机的结构回忆&#xff1a;计算机的工作过程总览指令的定义指令格式零地址指令一地址指令二三地址指令四地址指令小结 指令-按指令长度分类指令-按操作码长度分类指令-按操作类型分类总结 现代计算机的结构 回忆&#xff1a;计算机的工作过程 总览 指令的定义 …