设为首页 收藏本站
查看: 976|回复: 1

[经验分享] MySQL数据加密以及安全维护

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-17 09:33:49 | 显示全部楼层 |阅读模式
数据库可谓公司核心了,你是否对公司的数据有有效的安全措施呢?你是如何有效管理你的MySQL呢?这里不探讨其它数据库和云数据库,博主只分享自己一些生产经验,热爱开源热爱分享,感谢支持和指正!抛出几个问题,当然我也会从以下几点对数据库安全进行探讨:
1)你是如何管理数据库数据权限?
2)如何管理MySQL密码?
3)如何对数据库进行日志管理和行为审计?
4)如何对数据库备份?
5)如何对数据库备份加密?
6)如何跨机房保障数据安全?
......

安全维护措施:

1、如何管理数据数据权限?
wKioL1ilDMax7aBpAACJqlpl06I171.png
root权限一定要只允许本机登陆,并且MySQL安全目录权限一定要只允许本地,root用户一定要密钥认证登陆系统(这涉及到系统安全的优化)而且MySQL的安装目录权限一定要合理设置,并且mysql用户不可登陆,只作为启动用。MySQL的binlog要合理管理,配置好权限。
wKioL1ilDW-AzlgwAADnWS5T9go867.png
2)如何管理MySQL密码?

先说说常用的修改MySQL用户密码常用的的几种方式:
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em]4

[size=1em]5

[size=1em]6

[size=1em]7

[size=1em]8

[size=1em]9

[size=1em]10

[size=1em]11

[size=1em]12

[size=1em]13

[size=1em]14

[size=1em]15

[size=1em]16

[size=1em]17

[size=1em]18

[size=1em]19

[size=1em]20

[size=1em]21

[size=1em]22

[size=1em]23

[size=1em]24

[size=1em]25

[size=1em]26

[size=1em]27

[size=1em]28

[size=1em]29

[size=1em]30

[size=1em]31

[size=1em]32

[size=1em]33

[size=1em]34

[size=1em]35

[size=1em]36

[size=1em]37

[size=1em]38

[size=1em]39

[size=1em]40

[size=1em]1、mysqladmin -u root password "newpass"
[size=1em]如果已经配置了密码:
[size=1em]mysqladmin -uroot -prenzhiyuan password '123456'

[size=1em]2、用SET PASSWORD命令
[size=1em]mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('renzhiyuan');
[size=1em]Query OK, 0 rows affected (0.00 sec)

[size=1em]mysql>

[size=1em]3、UPDATE
[size=1em]mysql> UPDATE user SET Password = PASSWORD('123456') WHERE user = 'root';
[size=1em]Query OK, 4 rows affected (0.00 sec)
[size=1em]Rows matched: 4  Changed: 4  Warnings: 0

[size=1em]mysql>

[size=1em]查看:
[size=1em]mysql> select user,host,password from user;
[size=1em]+--------+---------------+-------------------------------------------+
[size=1em]| user   | host          | password                                  |
[size=1em]+--------+---------------+-------------------------------------------+
[size=1em]| root   | localhost     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
[size=1em]| root   | 127.0.0.1     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
[size=1em]|  +--------+---------------+-------------------------------------------+
[size=1em]5 rows in set (0.00 sec)

[size=1em]mysql>

[size=1em]MySQL在其内部是不存放用户的明文密码的,基本安全算是满足了。MySQL实际上是使用了两次SHA1夹杂一次unhex的方式对用户密码进行了加密,因此一般来说密文是通过不可逆加密算法得到的。这样即使敏感信息泄漏,除了暴力破解是无法快速从密文直接得到明文的。

[size=1em]mysql> select password('mypassword'),concat('*',sha1(unhex(sha1('mypassword'))));
[size=1em]+-------------------------------------------+---------------------------------------------+
[size=1em]| password('mypassword')                    | concat('*',sha1(unhex(sha1('mypassword')))) |
[size=1em]+-------------------------------------------+---------------------------------------------+
[size=1em]| *FABE5482D5AADF36D028AC443D117BE1180B9725 | *fabe5482d5aadf36d028ac443d117be1180b9725   |
[size=1em]+-------------------------------------------+---------------------------------------------+
[size=1em]1 row in set (0.47 sec)

[size=1em]mysql>
2.1)那么问题来了?不安全因素是什么?
2.1.1)MySQL的历史命令记录:
1
2
3
4
5
6
7
8
9
10
[iyunv@mysql ~]# cat .mysql_history
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('renzhiyuan');
show databases;
use mysql;
select host,password,user from user;
grant all on *.* to root@'192.168.1.243' identified by 'renzhiyuan';
flush privileges;
show databases;
flush privileges;
[iyunv@mysql ~]#



2.2.2)查看binlog可以查到明文密码(5.6后版本进行了修复)

2.3.3)以通过授权表直接越过密码。
2.4.4)明文登陆MySQL带来的安全问题
......
2.3)既然这样?如何有效的保护mysql的密码呢?
2.3.1)选择合适的版本(比如5.6.x)
2.3.2)登陆MySQL的时候,要禁止明文,防止别人通过历史命令查看。
2.3.3)管理好mysql的历史命令文件(默认在用户的.mysql_history下)
2.4.4)MySQL用户权限要慎重给,mysql相关核心文件权限要设置好,比如my.cnf,启动文件等
2.5.5)日志记录,行为审计
......
3)如何对数据库进行日志管理和行为审计?
3.1)操作日志管理
.mysql_history
要对历史命令文件进行安全维护
3.2)用户命令行为审计
避免一些用户在系统用明文登陆,将用户在服务器系统执行的命令都记录下来,当然,生产服务器是不允许不专业的人进去的,只是一些公司对安全没有足够重视。
3.3)对数据库用户增删改查进行记录
可以通过对数据库进行配置,听过二进制日志查找那些误操作记录。
4)如何对数据库备份?

数据库备份可谓是王道,选择有效数据库备份也很重要,选择合理的用户,不管是shell,还是py,如何有效避免密码问题,不管是用环境变量方式还是脚本加密方式,逻辑备份还是增量备份,三点比较重要:
4.1)备份的效率和完整性
4.2)备份的数据加密
4.3)备份的异地维护
4.4)脚本备份的安全维护
5)如何对数据库备份加密?
5.1)对数据库备份,然后对tar xz zip压缩然后加密
5.2)备份局域网传输对备份目录进行安全维护
5.3)异地备份,或者传输数据注意加密传输
eg:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[iyunv@MySQL ~]# ll
总用量 66352
-rw-r--r-- 1 root root 67940718 12月 21 2016 2016-12-21-07-00-01.sql
[iyunv@MySQL ~]# du -sh 2016-12-21-07-00-01.sql
65M 2016-12-21-07-00-01.sql
[iyunv@MySQL ~]# tar -czf - 2016-12-21-07-00-01.sql |openssl enc -e -aes256 -out MySQLbak_$(date +%F-%H-%M-%S).tar.gz
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:   #加密密码
[iyunv@MySQL ~]# ll
总用量 76536
-rw-r--r-- 1 root root 67940718 12月 21 2016 2016-12-21-07-00-01.sql
-rw-r--r-- 1 root root 10426544 1月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[iyunv@MySQL ~]# du -sh *
65M 2016-12-21-07-00-01.sql
10M MySQLbak_2016-01-28-13-23-10.tar.gz
[iyunv@MySQL ~]# mv 2016-12-21-07-00-01.sql /opt/
[iyunv@MySQL ~]# ll
总用量 10184
-rw-r--r-- 1 root root 10426544 1月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[iyunv@MySQL ~]# ll
总用量 10184
-rw-r--r-- 1 root root 10426544 1月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[iyunv@MySQL ~]# openssl enc -d -aes256 -in MySQLbak_2016-01-28-13-23-10.tar.gz |tar xz -C /root/
enter aes-256-cbc decryption password:   #错误密码

gzip: stdin: not in gzip format
tar: Child died with signal 13
tar: Error is not recoverable: exiting now
error writing output file
[iyunv@MySQL ~]# openssl enc -d -aes256 -in MySQLbak_2016-01-28-13-23-10.tar.gz |tar xz -C /root/
enter aes-256-cbc decryption password:    #正确密码
[iyunv@MySQL ~]# ll
总用量 76536
-rw-r--r-- 1 root root 67940718 12月 21 2016 2016-12-21-07-00-01.sql
-rw-r--r-- 1 root root 10426544 1月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[iyunv@MySQL ~]#




wKioL1ilG7zTISI0AADEPKmFmmo756.png

enc - openssl 命令使用加密进行编码
-e – 用来加密输入文件的 enc 命令选项,这里是指前一个 tar 命令的输出
-aes256 – 加密用的算法
-out – 用于指定输出文件名的 enc 命令选项,这里文件名是 secured.tar.gz
-d – 用于解密文件
-C – 提取内容到指定目录
6)如何跨机房保障数据安全?
6.1)主从ssl加密
wKioL1ilHDODhM7XAABhW6IQvJA246.png
6.2)对tcp层和ip层进行acl限制
.....


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-343271-1-1.html 上篇帖子: MySQL之XtraBackup实现完全备份、增量备份、数据还原 下篇帖子: MySQL之用Mysql-Proxy实现读写分离 数据加密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表