MySQL 数据库简介
MySQL是一个开源的关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL)进行数据管理。作为 LAMP 技术栈(Linux + Apache + MySQL + PHP/Python)的核心组件,它具有以下特点:
- 数据存储结构:采用表格式存储数据,支持主键、外键等关系约束
- 事务支持:提供 ACID(原子性、一致性、隔离性、持久性)事务保证
- 高可用性:支持主从复制、集群部署等高可用方案
- 跨平台性:可在 Linux、Windows、macOS 等多种操作系统运行
安全配置流程详解
步骤一:管理员身份登录 MySQL
sudo mysql # 适用于使用auth_socket认证的系统
# 标准密码验证登录(-u后必须空格)
mysql -u root -p # 输入root密码
步骤二:创建用户与数据库
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'SecurePass123!';
-- 创建数据库
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
步骤三:精细化权限分配
1. 数据库级权限控制
-- 授予app_db所有权限
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
2. 表级权限控制
-- 授予特定表权限
GRANT SELECT, INSERT ON app_db.user_table TO 'app_user'@'localhost';
MySQL 权限类型详解
权限 | 功能描述 | 风险等级 |
---|---|---|
CREATE | 创建新表/数据库 | ⚠️ 高 |
DROP | 删除表或数据库 | ⚠️⚠️ 极高 |
DELETE | 删除数据行 | ⚠️ 高 |
INSERT | 插入新数据 | ⚠️ 中 |
SELECT | 读取数据 | ⚠️ 低 |
UPDATE | 修改现有数据 | ⚠️⚠️ 高 |
GRANT OPTION | 授予他人权限 | ⚠️⚠️⚠️ 极高 |
步骤四:激活与验证配置
-- 刷新权限(必须步骤)
FLUSH PRIVILEGES;
-- 查看用户权限
SHOW GRANTS FOR 'app_user'@'localhost';
-- 退出会话
EXIT;
权限验证流程:
# 使用新用户登录
mysql -u app_user -p
# 尝试授权操作(应失败)
mysql> CREATE TABLE test.t1 (id INT);
-- ERROR 1142 (42000): CREATE command denied
# 验证允许的操作
mysql> USE app_db;
mysql> INSERT INTO user_table VALUES (1, 'demo');
-- Query OK, 1 row affected
安全增强实践
1. 访问控制策略
-- 限制特定IP段访问(示例)
CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'NetworkPass!';
2. 密码策略强化
-- 设置密码复杂度要求
SET GLOBAL validate_password.policy = MEDIUM;
-- 定期修改密码
ALTER USER 'app_user'@'localhost' IDENTIFIED BY 'New_Pass_2025!';
3. 权限回收机制
-- 移除危险权限
REVOKE DROP ON app_db.* FROM 'app_user'@'localhost';
4. 审计与监控
# 查看用户登录记录
grep 'app_user' /var/log/mysql/mysql.log
# 检查权限变更
mysql> SELECT * FROM mysql.tables_priv WHERE User='app_user';
MySQL 架构解析
- 1. 连接器:管理用户连接与认证
- 2. 查询缓存:缓存查询结果(MySQL 8.0+ 已移除)
- 3. 分析器:语法解析与语义验证
- 4. 优化器:生成最优执行计划
- 5. 执行引擎:调用存储引擎接口
- 6. 存储引擎:InnoDB(默认)/MyISAM 等
灾难恢复方案
1. 权限配置备份
# 备份授权表
mysqldump -u root -p --databases mysql > mysql_grants_backup.sql
2. 误删恢复流程
-- 步骤1:停止MySQL服务
sudo systemctl stop mysql
-- 步骤2:启动恢复模式
mysqld_safe --skip-grant-tables &
-- 步骤3:还原权限表
mysql -u root mysql < mysql_grants_backup.sql
-- 步骤4:刷新权限并重启
FLUSH PRIVILEGES;
sudo systemctl restart mysql