Mysql安全之基础合规配置
一、背景
某次某平台进行安全性符合型评估时,列出了数据库相关安全选项,本文特对此记录,以供备忘参考。
二、安全配置
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 LOW | Length(满足长度要求) |
1 or MEDIUM | Length; numeric, lowercase/uppercase, and special characters |
2 or STRONG | Length; numeric, lowercase/uppercase, and special characters; dictionary file |
创建触发器:每次插入或更新用户密码时检查密码复杂度
CREATE TRIGGER check_password_complexity
BEFORE INSERT ON users
FOR EACH ROW
BEGINDECLARE password_complexity_error VARCHAR(255) DEFAULT NULL;IF NEW.password REGEXP '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$' = 0THENSET 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 THENSIGNAL 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;
相关文章:

Mysql安全之基础合规配置
一、背景 某次某平台进行安全性符合型评估时,列出了数据库相关安全选项,本文特对此记录,以供备忘参考。 二、安全配置 2.1、数据库系统登录时的用户进行身份标识和鉴别; 1)对登录Mysql系统用户的密码复杂度是否有要…...
前后端分离项目跨域请求
一、前端vue项目 在项目中创建request.js文件,添加以下内容 import axios from "axios"; const api axios.create({ //这里配置的是后端服务提供的接口baseURL: "http://localhost:8080/web-demo",timeout: 1000} ); export default api; …...

OpenEuler系统桌面终端设置字体
初始界面 终端的字体间距过大,阅读起来不方便。 调整终端字体 点击菜单,选择“配置文件首选项” 未命名 ---- 文本---- 勾选 自定义字体 ---- 选择 "DejaVu LGC Sans Mono"字体 你也可以根据自己的喜好,选择其他字体。 修改好了…...
repo常用命令解析(持续更新)
1 同步 1.1 将本地仓库更新到最新状态。它会从远程服务器下载最新的代码,并将本地仓库与之同步。如果本地仓库中已经存在某个项目,repo sync会自动检测本地仓库中该项目的版本,并将其更新到最新状态。 类似于git fetch和git merge命令组合使…...

关于小红书商单变现的一些答疑
AI小红书商单训练营也过去1个月了,今天给大家汇总几个常遇到的问题,希望对大家在运营过程中有所帮助。 1.账号封面是否要统一模版? 为了让账号主页呈现整洁美观的效果,建议统一封面设计,视频开头可以设置一个固定画面…...

使用 Kubernetes Agent Server 实现 GitOps
目录 温习 GitOps 极狐GitLab Kubernetes Agent 极狐GitLab GitOps workflow 极狐GitLab KAS 的配置 创建极狐GitLab agent 创建 agent token Kubernetes 上安装 agent(agentk) 极狐GitLab GitOps workflow 实践 写在最后 温习 GitOps GitOps …...

Day12 qt QMianWindow,资源文件,对话框,布局方式,常用ui控件
QMianWindow 概述 QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏( menu bar )、多 个工具栏 (tool bars) 、多个铆接部件 (dock widgets) 、一个状态栏 (status bar) 及 一个中心部件 (central widget) 许多应用程序的基础…...

Python实现广义线性回归模型(statsmodels GLM算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 广义线性模型(Generalized Linear Model,简称GLM)是一种广泛应用于回归分析和分类问题的统…...

GNSEC 2022年第8届全球下一代软件工程线上峰会-核心PPT资料下载
一、峰会简介 新一代软件工程是指利用新的理论、方法和技术,在软件开发、部署、运维等过程中,实现软件的可控、可预测、可维护的软件生产方式。它涵盖了多个领域,如软件开发、测试、部署、运维等,旨在提高软件生产效率和质量。 …...

nVisual能为数据中心解决什么问题?
nVisual通过可视化的管理方式,使数据中心管理者能够有效且高效地管理数据中心的资产、线缆、容量、变更;使数据中心管理者能够获得如下问题的答案,以便能够快速做出更好、更明智的决策: 1.资产管理 我们有什么&#x…...

Android--Jetpack--Databinding详解
不经一番寒彻骨,怎得梅花扑鼻香 一,定义 DataBinding, 又名数据绑定,是Android开发中非常重要的基础技术,它可以将UI组件和数据模型连接起来,使得在数据模型发生变化时,UI组件自动更新。是 MVVM 模式在 An…...

Node.js入门指南(完结)
目录 接口 介绍 RESTful json-server 接口测试工具 会话控制 介绍 cookie session token 上一篇文章我们介绍了MongoDB,这一篇文章是Node.js入门指南的最后一篇啦!主要介绍接口以及会话控制。 接口 介绍 接口是前后端通信的桥梁 ࿰…...
MySQL和Java通用加密解密方式
加密方式使用 AES 加密,再转成 Base64。 SQL -- 加密 update your_table set your_columnto_base64(aes_encrypt(your_column, "password"));-- 解密 select aes_decrypt(from_base64(your_column) ,"password") from your_table; 使用原生 …...
若依前端APP版使用教程
1 增加页面流程 新增Page>新增API>新增组件>新增样式>新增路径(page.json) {"path": "pages/mes/pro/feedback/index","style": {"navigationBarTitleText": "工单报工"}} <template><view class&quo…...

2023 年工程师不可错过的 AI 主要发展趋势
从对未来的好奇到关键的企业工具,人工智能的发展证明了它对工程师的价值。不久前,Gartner 预测,采用人工智能工程实践来构建和管理自适应人工智能系统的企业,在实施人工智能模型方面的表现将优于同行至少 25%,这为各组…...
记录 | 安装地平线工具链install_ai_toolchain.sh出现cython版本问题报错解决
安装地平线工具链 install_ai_toolchain.sh: cd ddk/package/host/ai_toolchain bash install_ai_toolchain.sh出现报错: Requirement already satisfied: packaging>20.0 in /root/.local/lib/python3.8/site-packages (from matplotlib>2.1.0-…...
Java8流操作
Java8流操作 1. 双层Map一层List 1. 双层Map一层List 代码片 // 开始分组Map<String, Map<Object, List<ProjectGeographyVO>>> collect4 vos.stream()// 注释了下行没用市级项目,只有区// .filter(data -> String.valueOf(data.getCode()).length() …...
vue-socket.io以及原生websocket的使用
vue3使用socket.io 1、安装 npm install vue-socket.io2、创建socket.js文件 export const registerSockets (sockets, proxy) > {sockets &&Object.keys(sockets).forEach((t) > {// console.log(t);// "subscribe" ! t &&// "un…...

谷歌推出功能最强大的大语言模型Gemini;大规模语言模型:从理论到实践
🦉 AI新闻 🚀 谷歌推出功能最强大的大语言模型Gemini 摘要:谷歌正式推出其迄今为止功能最强大、最通用的大语言模型Gemini。Gemini在许多测试中表现出了最先进的性能,在大部分基准测试中击败了OpenAI的GPT-4。谷歌发布了三种不同…...
Android studio 工程的 module 依赖关系图绘制 、 Android Module 依赖关系的可视化实现
整体步骤: 1、利用gradle脚本生成dot; 2、利用graphviz将dot可视化转为图片 利用gradle脚本生成dot 下载projectDependencyGraph.gradle脚本 下载 projectDependencyGraph.gradle ,放在项目根目录, 源码如下: t…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...