MYSQL-收集

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敏感数据进行加密的几种方法小结

 

posted @ 2024-12-27 15:43  hanease  阅读(38)  评论(0)    收藏  举报