1、MySQL敏感数据进行加密的几种方法小结

AES_ENCRYPT和AES_DECRYPT函数

AES(Advanced Encryption Standard)是一种对称加密算法。在MySQL中,可以使用AES_ENCRYPT函数对数据进行加密,使用AES_DECRYPT函数进行解密。这种加密方式的特点是加密和解密使用相同的密钥。

MD5函数(单向加密,用于验证)
MD5是一种单向加密哈希函数,它将任意长度的数据转换为固定长度(128位)的哈希值。由于它是单向的,无法从哈希值还原出原始数据。通常用于验证数据是否被篡改,例如存储用户密码的哈希值,在用户登录时比较输入密码的哈希值和存储的哈希值是否一致。
使用透明数据加密(TDE)
TDE是一种在数据库层面提供的加密解决方案。它可以对整个数据库、表空间或者特定的表进行加密。MySQL企业版支持TDE,其原理是在数据写入磁盘时自动进行加密,在从磁盘读取数据时自动解密。这样可以在不改变应用程序对数据库访问方式的情况下,提供数据的安全性。TDE通常使用数据库服务器的密钥管理基础设施(KMI)来管理加密密钥。

2、如何查本地mysql的username和密码及更新密码几种方式

SELECT USER, HOST, PLUGIN, authentication_string FROM mysql.user;

SHOW VARIABLES LIKE 'validate%';

SHOW VARIABLES LIKE '%default_password_lifetime%';

SHOW VARIABLES LIKE '%wait_timeout%';

使用无验证模式启动 MySQL。执行命令 `mysqld_safe --skip-grant-tables`

select authentication_string,password_expired from user where user='root';

1. 查找 MySQL 当前用户
你可以通过以下命令登录 MySQL,并查看当前连接的用户名。
mysql -u root -p
mysql -u your_username -p
查看当前用户: 登录后,运行以下 SQL 命令来查看当前用户:
SELECT USER();
这个命令会返回当前连接的 MySQL 用户名。

2. 查找 MySQL 用户列表
要查看 MySQL 数据库中的所有用户,你可以在 MySQL 终端中执行以下命令:

SELECT user, host FROM mysql.user;
这将列出所有的 MySQL 用户以及它们的主机名(如 localhost)。这个列表中的用户就是你在本地 MySQL 数据库中可以使用的用户名。

3. 查找 MySQL 用户密码
MySQL 的用户密码通常不会直接存储在配置文件中,而是保存在数据库中的加密字段里。你无法直接查看密码,但可以通过以下方式重置或更新密码:

重置 MySQL 用户密码
登录 MySQL: 使用具有管理员权限的用户(通常是 root)登录:
mysql -u root -p
更新用户密码: 如果你需要为某个用户重置密码,可以使用以下命令:
ALTER USER 'your_username'@'localhost' IDENTIFIED BY 'new_password';
例如,为 root 用户重置密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
刷新权限: 修改完密码后,刷新权限以确保生效:
FLUSH PRIVILEGES;

4. 检查 MySQL 配置文件
MySQL 的用户名和密码有时会保存在应用程序的配置文件或环境变量中(如 Spring Boot 项目的 application.properties 文件),但 MySQL 本身的密码通常不直接存储在这些地方。如果你是使用某些自动化脚本或配置管理工具部署的 MySQL,有时可以在配置文件中找到默认的 MySQL 用户名和密码。

Linux/MacOS 上 MySQL 的配置文件可能位于:
/etc/mysql/my.cnf
/usr/local/mysql/my.cnf
/etc/my.cnf

Windows 上 MySQL 的配置文件可能位于:
C:\ProgramData\MySQL\MySQL Server x.x\my.ini
注意:配置文件里通常不会直接存储密码,只会有数据库连接的配置。如果你找不到密码,建议重置密码。

5. 忘记了 MySQL root 用户的密码?如何重置
如果你忘记了 MySQL root 用户的密码,可以按照以下步骤重置:
1. 停止 MySQL 服务
Linux/MacOS:
sudo systemctl stop mysql
Windows: 打开服务管理器,找到 MySQL 服务并停止。
2. 启动 MySQL 到安全模式
不加载权限表启动 MySQL:
sudo mysqld_safe --skip-grant-tables &
3. 登录 MySQL(无需密码)
mysql -u root
4. 重置密码
在 MySQL 命令行中输入以下命令重置 root 密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES;

5. 重启 MySQL 服务
Linux/MacOS:
sudo systemctl restart mysql
Windows: 在服务管理器中重新启动 MySQL 服务。

3、mysql实用操作之日期格式化例子

在MySQL中,你可以使用DATE_FORMAT()函数来格式化日期。DATE_FORMAT() 函数通常用于格式化 DATETIME 或 TIMESTAMP类型的字段。这个函数允许你按照指定的格式来显示日期和时间。

下面是一些常见的日期格式化的例子:

显示年-月-日:

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
显示月/日/年:

SELECT DATE_FORMAT(NOW(), '%m/%d/%Y');
显示完整的日期和时间:

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
显示小时和分钟:

SELECT DATE_FORMAT(NOW(), '%H:%i');
显示星期几:

SELECT DATE_FORMAT(NOW(), '%W'); -- 星期几(Sunday=0, ..., Saturday=6)
显示月份的名称:

SELECT DATE_FORMAT(NOW(), '%M'); -- 月份的名称(January, ..., December)
显示月份的缩写:

SELECT DATE_FORMAT(NOW(), '%b'); -- 月份的缩写(Jan, ..., Dec)
显示年份的最后两位数字:

SELECT DATE_FORMAT(NOW(), '%y');
显示AM或PM:

SELECT DATE_FORMAT(NOW(), '%p');
显示秒:

SELECT DATE_FORMAT(NOW(), '%s');
这些是DATE_FORMAT()函数的一些基本用法。你可以根据需要组合不同的格式化选项来创建自定义的日期格式。

如果你尝试对一个非日期时间类型的字段使用 DATE_FORMAT(),比如 INT 或 VARCHAR,MySQL 会返回一个错误,因为它无法将这些类型的数据解释为日期或时间。

如果你有一个非日期时间类型的字段,但你知道它包含的是日期或时间信息,你可能需要先将其转换为 DATETIME 类型,然后再使用 DATE_FORMAT() 函数。例如,如果一个 VARCHAR 字段包含日期时间字符串,你可以使用 STR_TO_DATE() 函数将其转换:

SELECT DATE_FORMAT(STR_TO_DATE(your_varchar_column, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d %H:%i:%s');
这里,STR_TO_DATE() 函数将字符串转换为 DATETIME 类型,然后 DATE_FORMAT() 函数将其格式化为所需的格式。

4、MySQL记录操作日志常用的几种实现方法

1. 启用 MySQL 通用查询日志(General Query Log)
MySQL 提供了通用查询日志(General Query Log)功能,可以记录所有执行的 SQL 查询。启用此日志可以帮助你跟踪数据库中的操作。

启用方法:
编辑 MySQL 配置文件(通常是 my.cnf 或 my.ini,根据你的操作系统和 MySQL 安装位置可能有所不同):

在 [mysqld] 部分添加以下配置:

general_log = 1
general_log_file = /path/to/your/logfile.log
general_log = 1:启用通用查询日志。
general_log_file:指定日志文件的存放路径。
重启 MySQL 服务: 修改配置文件后,重启 MySQL 服务使其生效。

sudo systemctl restart mysql
动态启用/禁用通用查询日志: 你也可以通过 SQL 命令动态启用或禁用通用查询日志:

SET GLOBAL general_log = 'ON'; -- 启用
SET GLOBAL general_log = 'OFF'; -- 禁用

注意:
通用查询日志记录所有的 SQL 查询,包括 SELECT、INSERT、UPDATE、DELETE 等。
启用查询日志可能会导致性能下降,尤其是在高负载环境下,因为每个查询都需要写入日志文件。
可以通过查看日志文件来分析操作记录,但日志文件会非常庞大,因此需要定期清理。

2. 启用 MySQL 二进制日志(Binary Log)
二进制日志主要用于复制和数据恢复,但它也可以用来记录更详细的操作历史,尤其是涉及到更改数据的操作。不同于通用查询日志,二进制日志不记录 SELECT 查询,仅记录更改数据的操作。

启用方法:
在 MySQL 配置文件 my.cnf 或 my.ini 中启用二进制日志:

[mysqld]
log_bin = /path/to/your/mysql-bin
binlog_format = ROW
log_bin:启用二进制日志。
binlog_format = ROW:设置二进制日志格式为行级(ROW),这样能更精确地记录数据变更。
重启 MySQL 服务:

sudo systemctl restart mysql
查看二进制日志:

可以使用以下命令查看二进制日志中的内容:

mysqlbinlog /path/to/your/mysql-bin.000001
注意:
二进制日志文件也会随着时间增长,因此需要定期清理。
二进制日志提供了对数据变更的详细记录,适合用于数据恢复和数据审计。

3. 使用 MySQL 审计插件(Audit Plugin)
MySQL 还提供了审计插件(例如 MySQL Enterprise Audit Plugin),它专门用于记录用户的操作日志,包括登录、查询、修改等操作。

启用 MySQL Enterprise Audit Plugin:
安装和启用插件:

INSTALL PLUGIN audit_log SONAME 'audit_log.so';
配置审计日志文件路径:

SET GLOBAL audit_log_file = '/path/to/audit_log.log';
查看审计日志:

审计插件会将记录的信息写入指定的日志文件,可以使用常规文本查看工具查看这些日志。

注意:
MySQL 审计插件通常是 MySQL 企业版的特性,但也有开源的审计插件可供使用。
审计插件提供的日志记录更细致,可以记录用户的每个操作,并允许你设置不同的日志记录级别。

4. 使用触发器(Triggers)记录操作日志
如果你希望针对特定的表记录操作日志,可以通过触发器来实现。当表中发生 INSERT、UPDATE 或 DELETE 操作时,触发器可以将操作日志插入到一个日志表中。

示例:创建日志表和触发器
创建日志表:

CREATE TABLE operation_log (
id INT AUTO_INCREMENT PRIMARY KEY,
action_type VARCHAR(20),
table_name VARCHAR(50),
old_data TEXT,
new_data TEXT,
user VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
创建触发器:

例如,记录 users 表的所有 INSERT 操作:

DELIMITER //

CREATE TRIGGER after_user_insert
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO operation_log (action_type, table_name, new_data, user)
VALUES ('INSERT', 'users', CONCAT('id: ', NEW.id, ', name: ', NEW.name), USER());
END //

DELIMITER ;
其他触发器:

对于 UPDATE 操作,可以记录 old_data 和 new_data。
对于 DELETE 操作,可以仅记录 old_data。

5、MySQL中函数用法小结

group_concat:函数用于将groupby产生的同一个分组中的值连接成一个字符串,支持去重、排序和自定义分隔符

LAG()可以用来访问当前行的前一行或多行的数据。这个函数通常用于分析时间序列数据,比如计算相邻行之间的差异或者获取前一个状态等。

查看数据库连接数:

1. 使用SHOW STATUS命令
SHOW STATUS LIKE 'Threads_connected';
2. 查看information_schema数据库
SELECT * FROM information_schema.PROCESSLIST;
3. 使用SHOW PROCESSLIST命令
SHOW PROCESSLIST;
4. 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
5. 使用性能模式
-- 启用性能模式
SET GLOBAL performance_schema = ON;
-- 查询连接统计信息
SELECT * FROM performance_schema.data_locks;

CPU激增:

show global status like 'Questions';
show global status like 'Uptime';
show processlist;
show full processlist;
SHOW ENGINE INNODB STATUS;

1、MySQL敏感数据进行加密的几种方法小结

1、MySQL敏感数据进行加密的几种方法小结

MYSQL-收集的更多相关文章

  1. mysql收集统计信息

    一.手动  执行Analyze table innodb和myisam存储引擎都可以通过执行“Analyze table tablename”来收集表的统计信息,除非执行计划不准确,否则不要轻易执行该 ...

  2. Open-Falcon 监控系统监控 MySQL/Redis/MongoDB 状态监控

    背景: Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案,具体的安装和使用说明请见官网:http://open-falcon.org/,是一款比较全的监控.而且提供各种API ...

  3. Mysql(MyISAM和InnoDB)及Btree和索引优化

    MYSQL 一.引擎 mysql:MySQL是一个关系型数据库管理系统,其中有两种引擎最为常见MyISAM和InnoDB MyISAM(非聚集索引)  MySQL 5.0 之前的默认数据库引擎,最为常 ...

  4. MySQL中使用SHOW PROFILE命令分析性能的用法整理

    show profile是由Jeremy Cole捐献给MySQL社区版本的.默认的是关闭的,但是会话级别可以开启这个功能.开启它可以让MySQL收集在执行语句的时候所使用的资源.为了统计报表,把pr ...

  5. mysql索引优化续

    (1)索引类型: Btree索引:抽象的可以理解为“排好序的”快速查找结构myisam,innodb中默认使用Btree索引 hash索引:hash索引计算速度非常的快,但数据是随机放置的,无法对范围 ...

  6. MySQL中使用SHOW PROFILE命令分析性能的用法整理(配合explain效果更好,可以作为优化周期性检查)

    这篇文章主要介绍了MySQL中使用show profile命令分析性能的用法整理,show profiles是数据库性能优化的常用命令,需要的朋友可以参考下   show profile是由Jerem ...

  7. Mysql中的sql是如何执行的 --- 极客时间学习笔记

    MySQL中的SQL是如何执行的 MySQL是典型的C/S架构,也就是Client/Server架构,服务器端程序使用的mysqld.整体的MySQL流程如下图所示: MySQL是有三层组成: 连接层 ...

  8. linux卸载及安装mysql 5.7以上

    删除: 1.rpm -qa|grep -i mysql     查看安装的mysql 2./usr/local/mysql/support-files/mysql.server stop  停止mys ...

  9. 11-MySQL DBA笔记-MySQL的监控

    第11章 MySQL的监控 为什么我们需要监控呢?因为如果没有了监控,那么我们的服务可用性就无从度量,我们也无法及时地发现问题和处理问题.一个完善的监控体系,不仅需要进行实时的监控,也需要分析历史的监 ...

  10. 谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的

    目录 一.binlog 的高速缓存 二.刷盘机制 三.推荐的策略 推荐阅读 问个问题吧!为什么你需要了解binlog的落盘机制呢? 我来回答一下: ​ 上一篇文章提到了生产环境中你可以使用binlog ...

随机推荐

  1. @RequestBody注解转对象中驼峰格式的参数无法接收到数据的问题解决方法

    1.问题:驼峰格式的参数传递到后端,@RequestBody注解标注的实体对象参数没有接收到对应的数据 前端传参:执行结果:请求参数实体: import lombok.Data; /** * 请求参数 ...

  2. Hadoop习题汇总

    目录 选择 单选 多选 判断 填空 简答 选择 单选 查看HDFS系统版本的Shell命令,以下正确的是(). hdfs -ver hdfs version (答案) dfsadmin version ...

  3. 『玩转Streamlit』--登录认证机制

    如果你的Streamlit App中使用的数据的比较敏感,那么,保护这个App及其背后的数据免受未授权访问变得至关重要. 无论是出于商业机密的保护.用户隐私的维护,还是为了满足日益严格的合规要求,确保 ...

  4. Swagger注解中带有“/”导致SwaggerUI显示异常

    日常开发中一直使用swagger作为接口文档工具使用,这次在使用过程中发现一个问题. 正常情况下显示如下图 代码配置如下图 Controller Model 如果在Swagger注解中使用" ...

  5. ubuntu系统安装wps后语言是英文的问题

    如果安装ubuntu系统后,在里面安装wps的时候,发现都是英文,无法切换为中文,可以这样操作. 此时点击这里新建一个word空白文档 点击这里新建文档 点击这里显示语言 点击下面的 简体中文 再点击 ...

  6. 在不同形式的for循环中使用break、continue、return的效果

    我们在循环中,经常会有跳出循环,跳出本次循环继续下次循环等的场景,今天我们简单分享下.主要使用到的关键字是,break.continue.return.先将结果总结: ①在foreach中不能使用br ...

  7. 推荐7个最强Appium替代工具,移动App自动化测试必备!

    在移动应用开发日益火爆的今天,自动化测试成为了确保应用质量和用户体验的关键环节.Appium 作为一款广泛应用的移动应用自动化测试工具,为测试人员所熟知.然而,在不同的测试场景和需求下,还有许多其他优 ...

  8. django admin 后台管理 新手学习步骤记录 (2)

    学习使用django admin后台管理. 参考.Django基础之Admin后台数据管理_django admin_马航行的博客-CSDN博客

  9. 鸿蒙应用开发从入门到入行 - 篇7:http网络请求

    鸿蒙应用开发从入门到入行 第七篇 - http网络请求 导读:在本篇文章里,您将掌握鸿蒙开发工具DevEco的基本使用.ArkUI里的基础组件,并通过制作一个简单界面掌握使用 HarmonyOS - ...

  10. Http请求报文(请求行,请求头、请求体)

    Http请求报文: http请求报文由3部分组成,请求行,请求头,请求体. 一.请求行: 请求方法.URL地址.协议版本 请求方法:POST.GET.DELETE.PUT.HEAD.OPTIONS.T ...