浅谈MySQL数据库的Web安全问题

数据安全是如今互联网安全很是重要一个环节。并且一旦数据出现问题是不可逆的,甚至是灾难性的。mysql

有一些防御措施应该在前面几个博文说过了,就再也不赘述。好比经过防火墙控制,经过系统的用户控制,经过Web应用的控制等。算法

想说的是,任何一个节点都不是单独存在的。sql

场景数据库

一、确保应用自己安全。缓存

二、控制系统用户对数据库的访问权限。安全

三、控制数据库用户对数据库的访问权限。服务器

四、确保数据库敏感数据的安全。网络

五、确保数据库整个数据的完整性。数据结构

六、规范平常运维操做运维

七、合理的划分业务。

解决方案

应用安全

删除默认的数据库和用户

mysql初始化后会自动生成空用户和test库,这会对数据库构成威胁,咱们所有删除。

 
  1. mysql> drop database test; 
  2. mysql> use mysql; 
  3. mysql> delete from db; 
  4. mysql> delete from user where not(host=”localhost” and user=”root”); 
  5. mysql> flush privileges; 

禁止数据库从本地直接加载内容

在某些状况下,LOCAL INFILE命令可被用于访问操做系统上的其它文件(如/etc/passwd),应使用下现的命令:

 
  1. mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1 
  2. # 更简单的方法是: 
  3. mysql> SELECT load_file("/etc/passwd") 

为禁用LOCAL INFILE命令,应当在MySQL配置文件的[mysqld]部分增长下面的参数:

 
  1. set-variable=local-infile=0 

控制用户的权限

这里用户,指的是数据库里的用户。

控制访问的ip。

只容许信任的ip访问,其余的ip都应该拒绝。

好比:只容许办公网络,还有业务服务器对应的网络能够访问。

区分角色

区分角色,给不一样的权限。角色的划分须要根据具体的使用场景。

下面简单举例:

一、角色:view。权限:只容许查询数据,不容许作任何修改。场景:业务正确性验证时

二、角色:update。权限:容许修改数据,可是不容许修改数据结构。场景:程序运行

三、角色:operate。权限:容许修改表结构,容许新增和修改表,不容许删除表,不容许删库。场景:产品要发布的时候才可使用,经过升级sql方式执行。

四、.....

加密敏感信息

要使用md5,sha等算法加密。这样即便数据丢失,也能减小损失。好比:登陆密码,支付密码等。

保证数据的完整性

一、解决单点故障。主从,主主。

二、须要备份与还原。

规范平常操做

一、若是没有特殊需求,应该使用最小的用户。好比只使用查看的用户。

二、有须要修改数据或者结构的操做,能够考虑两人一块儿。或者能够考虑作成功能,减小人为直接操做数据库。

三、在测试环境上测试OK,才往正式环境执行。

业务的划分

少用数据库

能够经过缓存,静态化。尽量少的使用数据库。能不使用数据库是最安全。

分库分表

敏感的数据和经常使用的数据,最好从表的设计上隔离。好比:用户的详情信息和支付信息最好分开。

优化sql

这个也很是重要,每每就是由于不重要sql的优化,因此数据库对应的服务器资源吃满不提供服务。

验证方法

经过不一样的帐号操做,判断有没有对应的权限。

相关文章
相关标签/搜索