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. FA分析树

    \(CFG\) 的分析树 例如语句 \[(1)E \rightarrow E +E \\ (2)E \rightarrow E *E\\ (3)E \rightarrow -E\\ (4)E \rig ...

  2. unique:数组去重,返回一个新数组

    function unique(arr){ if(!isArrayLink(arr)){ //不是类数组对象 return arr } let result = [] let objarr = [] ...

  3. delphi Image32 图形处理 图层

    图形图层处理是Image32的主要功能,矢量图形,分层类似 Photoshop看人图层,直接上代码效果. unit uFrmLayer; interface uses Winapi.Windows, ...

  4. CodeForces Round 898 (div 4) H题解析

    CodeForces Round 898 (div 4)H. Mad  City 大致思路    对于有n条边和n个点,说明这个图里面只有一个环 并且两人同时开始和结束移动,所以可以得到当Valeri ...

  5. 鸿蒙hvigor构建任务依赖与生命周期简介

    Hivgor脚本文件 在构建的生命周期中Hvigor使用两个脚本文件来完成插件.任务以及生命周期hook的注册: hvigorconfig.ts:此文件在整个项目中只有根目录下存在一份,不是构建必须的 ...

  6. Linux中的用户管理-创建删除修改

    用户管理 一.用户分类 用户分为三类: 1.管理员 root root UID:0 #拥有最高权限 默认系统中就一个 UID即user ID 类似于身份号码,唯一的,不可重复 2.虚拟用户 作用:在运 ...

  7. 优秀的 Java 程序员所应该知道的 Java 知识

    JDK 相关知识 JDK 的使用 JDK 源代码 JDK 相应技术背后的原理 JVM 相关知识 服务器端开发需要重点熟悉的 Java 技术 Java 并发 Java IO 开源框架 Java 之外的知 ...

  8. Blazor 小技巧之 lambda传参

    我们的按钮点击事件,基本上都是一个无参的方法或者是一个MouseEnvent方法. 这里以BootstrapBlazor的Button为例,它的点击回调是这样的: EventCallback<M ...

  9. dotnet core微服务框架Jimu ~ 基础网关

    网关提供外部访问内部微服务的统一入口,基于分布式和服务治理等功能特点,外部不能绕过网关调用内部微服务(框架本身提供外部可以直接访问内部微服务的功能,这里不作详细说明),外部通过 http 协议请求网关 ...

  10. uniapp安卓在线更新版本

    实现逻辑 通过获取线上的版本号和app的版本号进行对比 查看是不是最新版 - app版本号小于线上版本号则不是最新版 提示更新 模拟检测更新请求 起一个服务,也就是检测更新的接口 返回值为最新版本号和 ...