数据安全是如今互联网安全很是重要一个环节。并且一旦数据出现问题是不可逆的,甚至是灾难性的。mysql
有一些防御措施应该在前面几个博文说过了,就再也不赘述。好比经过防火墙控制,经过系统的用户控制,经过Web应用的控制等。算法
想说的是,任何一个节点都不是单独存在的。sql
场景数据库
一、确保应用自己安全。缓存
二、控制系统用户对数据库的访问权限。安全
三、控制数据库用户对数据库的访问权限。服务器
四、确保数据库敏感数据的安全。网络
五、确保数据库整个数据的完整性。数据结构
六、规范平常运维操做运维
七、合理的划分业务。
解决方案
应用安全
删除默认的数据库和用户
mysql初始化后会自动生成空用户和test库,这会对数据库构成威胁,咱们所有删除。
禁止数据库从本地直接加载内容
在某些状况下,LOCAL INFILE命令可被用于访问操做系统上的其它文件(如/etc/passwd),应使用下现的命令:
为禁用LOCAL INFILE命令,应当在MySQL配置文件的[mysqld]部分增长下面的参数:
控制用户的权限
这里用户,指的是数据库里的用户。
控制访问的ip。
只容许信任的ip访问,其余的ip都应该拒绝。
好比:只容许办公网络,还有业务服务器对应的网络能够访问。
区分角色
区分角色,给不一样的权限。角色的划分须要根据具体的使用场景。
下面简单举例:
一、角色:view。权限:只容许查询数据,不容许作任何修改。场景:业务正确性验证时
二、角色:update。权限:容许修改数据,可是不容许修改数据结构。场景:程序运行
三、角色:operate。权限:容许修改表结构,容许新增和修改表,不容许删除表,不容许删库。场景:产品要发布的时候才可使用,经过升级sql方式执行。
四、.....
加密敏感信息
要使用md5,sha等算法加密。这样即便数据丢失,也能减小损失。好比:登陆密码,支付密码等。
保证数据的完整性
一、解决单点故障。主从,主主。
二、须要备份与还原。
规范平常操做
一、若是没有特殊需求,应该使用最小的用户。好比只使用查看的用户。
二、有须要修改数据或者结构的操做,能够考虑两人一块儿。或者能够考虑作成功能,减小人为直接操做数据库。
三、在测试环境上测试OK,才往正式环境执行。
业务的划分
少用数据库
能够经过缓存,静态化。尽量少的使用数据库。能不使用数据库是最安全。
分库分表
敏感的数据和经常使用的数据,最好从表的设计上隔离。好比:用户的详情信息和支付信息最好分开。
优化sql
这个也很是重要,每每就是由于不重要sql的优化,因此数据库对应的服务器资源吃满不提供服务。
验证方法
经过不一样的帐号操做,判断有没有对应的权限。