Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | 视频教程 | bilibili | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 打赏(Donations) | About
知乎专栏多维度架构 | 微信号 netkiller-ebook | 51CTO:视频教程

第 22 章 数据库安全

目录

22.1. 数据库结构版本控制
22.1.1. 什么是数据库结构版本控制
22.1.2. 为什么要做数据库结构本版控制
22.1.3. 何时做数据库结构本版控制
22.1.4. 在哪里做数据库结构本版控制
22.1.5. 谁来负责数据库结构本版控制
22.1.6. 怎样做数据库结构本版控制
22.1.6.1. 安装脚本
22.1.6.2. 启动脚本,停止脚本
22.1.6.3. 查看历史版本
22.2. 保护表
22.3. 保护表字段
22.4. 时间一致性
22.5. 为数据安全而分库
22.6. 内容版本控制,撰改留痕
22.7. 数据库审计表
22.8. 用户/角色认证
22.9. Token 认证
22.10. 数据加密
22.10.1. AES_ENCRYPT / AES_DECRYPT
22.10.2. 加密字段
22.11. 开发加密插件开发
22.12. 数据区块链
22.13. 状态保护
22.14. 数据归档

22.1. 数据库结构版本控制

http://netkiller.github.io/journal/mysql.struct.html

22.1.1. 什么是数据库结构版本控制

首先说说什么是数据库结构,什么是版本控制。

数据库结构是指数据库表结构,数据库定义语言导出的DDL语句。主要由CREATE TABLE, DROP TABLE等等构成。

再来说说什么是版本控制,如果你从事开发工作应该会很容易理解,版本控制就是记录每一次提交的变化,可以随时查看历史记录,并可回撤到指定版本。

22.1.2. 为什么要做数据库结构本版控制

软件开发过程中需要常常对数据库结构作调整,这是无法避免的。例如需求还不明确,开发人员只能按照所理解需求创建表。需求往往会发生变化,一旦变化,代码需要修改,表结构也避免不了。 我们常常刚改好数据库结构,需求部门有发来通知,不用修改了,维持原有设计。甚至是过了几周再次回撤。

所以我们要将数据库结构的变化进行版本控制,通常的做法是DBA人工管理,但我觉完全可以自动化的工作,没有必要浪费人力资源,且自动化不会犯错更稳定,仅仅需要人工定期查看工作状态即可。

22.1.3. 何时做数据库结构本版控制

任何时候都可以部署下面的脚本,对现有系统无任何影响。

22.1.4. 在哪里做数据库结构本版控制

可以在版本控制服务器上,建议GIT仓库push到远程。

22.1.5. 谁来负责数据库结构本版控制

DBA与配置管理员都可以做,通常DBA不接触版本库这块,建议创建一个backup用户给配置管理员。

22.1.6. 怎样做数据库结构本版控制

22.1.6.1. 安装脚本

首先下载脚本 https://github.com/oscm/devops/blob/master/shell/backup.mysql.struct.sh

wget https://raw.githubusercontent.com/oscm/devops/master/shell/backup.mysql.struct.sh
mv backup.mysql.struct.sh /usr/local/bin
chmod +x /usr/local/bin/backup.mysql.struct
			

创建备份用户

CREATE USER 'backup'@'localhost' IDENTIFIED BY 'SaJePoM6BAPOmOFOd7Xo3e1A52vEPE';
GRANT SELECT, LOCK TABLES  ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'backup'@'localhost';
			

配置脚本

BACKUP_HOST="localhost"			数据库主机
BACKUP_USER="backup"			备份用户
BACKUP_PASS="chen"				备份密码
BACKUP_DBNAME="test aabbcc"		版本控制那些数据库,多个数据库使用空格分隔
BACKUP_DIR=~/backup				数据库结构放在那里
			

初始化仓库

# /usr/local/bin/backup.mysql.struct init
Initialized empty Git repository in /www/database/struct/.git/
			

22.1.6.2. 启动脚本,停止脚本

# /usr/local/bin/backup.mysql.struct
Usage: /usr/local/bin/backup.mysql.struct {init|start|stop|status|restart}
			

开始脚本

# /usr/local/bin/backup.mysql.struct start
			

查看状态

# /usr/local/bin/backup.mysql.struct status
 9644 pts/1    S      0:00 /bin/bash /usr/local/bin/backup.mysql.struct start
			

停止脚本

# /usr/local/bin/backup.mysql.struct status
			

22.1.6.3. 查看历史版本

通过 git log 命令查看历史版本

			
# cd /www/database/struct/

# git status
# On branch master
nothing to commit (working directory clean)

# git log
commit d38fc624c21cad0e2f55f0228bff0c1be981827c
Author: root <root@slave.example.com>
Date:   Wed Dec 17 12:33:55 2014 +0800

    2014-12-17.04:33:55			
			
				

这里仅仅是讲数据库结构版本控制,关于版本控制软件更多细节,延伸阅读 《Netkiller Version 手札》

网站:http://www.netkiller.cn/ | 知乎:netkiller | 51CTO:视频教程 | Bilibili:netkiller | Github:netkiller