第 4 章 MySQL 安全管理
一、外围网络:
第一道防线:“网络设备防线”,因为暴露到广域网潜在的危险非常多,尽可能的让我们的MySQL 处在一个有保护的局域网之中,有了网络设备的保护,屏蔽来自外部的潜在威胁。
二、主机:
第二道防线“主机层防线”,“主机层防线”主要拦截网络(包括局域网内)或者直连的未授权用户试图入侵主机的行为。
因为一个恶意入侵者在登录到主机之后,可能通过某些软件程序窃取到那些自身安全设置不够健壮的数据库系统的登入
口令,从而达到窃取或者破坏数据的目的。如一个主机用户可以通过一个未删除且未设置密
码的无用户名本地帐户轻易登入数据库,也可以通过MySQL 初始安装好之后就存在的无密码
的“root@localhost”用户登录数据库并获得数据库最高控制权限。
非法用户除了通过登入数据库获取(或者破坏)数据之外,还可能通过主机上面相关权
限设置的漏洞,跳过数据库而直接获取MySQL 数据(或者日志)文件达到窃取数据的目的,
或者直接删除数据(或者日志)文件达到破坏数据的目的。
三、数据库:
我们的第三道防线,“数据库防线”,
通过第二道防线“主机层防线”的把守,我们又可以挡住很大一部分安全威胁者。但仍
然可能有极少数突破防线的入侵者。而且即使没有任何“漏网之鱼”,那些有主机登入权限
的使用者呢?是否真的就是完全可信任对象?No,我们不能轻易冒这个潜在风险。对于一个
有足够安全意识的管理员来说,是不会轻易放任任何一个潜在风险存在的。
这个时候,我们的第三道防线,“数据库防线”就需要发挥他的作用了。“数据库防线”
也就是MySQL 数据库系统自身的访问控制授权管理相关模块。这道防线基本上可以说是
MySQL 的最后一道防线了,也是最核心最重要的防线。他首先需要能够抵挡住在之前的两层
防线都没有能够阻拦住的所有入侵威胁,同时还要能够限制住拥有之前二层防线自由出入但
不具备数据库访问权限的潜在威胁者,以确保数据库自身的安全以及所保存数据的安全。
之前的二层防线对于所有数据库系统来说基本上区别不大,都存在着基本相同的各种威
胁,不论是Oracle 还是MySQL,以及任何其他的数据库管理系统,都需要基本一致的“布
防”策略。但是这第三层防线,也就是各自自身的“数据库防线”对于每个数据库系统来说
都存在较大的差异,因为每种数据库都有各自不太一样的专门负责访问授权相关功能的模
块。不论是权限划分还是实现方式都可能不太一样。
对于MySQL 来说,其访问授权相关模块主要是由两部分组成。一个是基本的用户管理模
块,另一个是访问授权控制模块。用户管理模块的功能相对简单一些,主要是负责用户登录
连接相关的基本权限控制,但其在安全控制方面的作用却不比任何环节小。他就像MySQL
的一个“大门门卫”一样,通过校验每一位敲门者所给的进门“暗号”(登入口令),决定是
否给敲门者开门。而访问授权控制模块则是随时随地检查已经进门的访问者,校验他们是否
有访问所发出请求需要访问的数据的权限。通过校验者可顺利拿到数据,而未通过校验的访
问者,只能收到“访问越权了”的相关反馈。
上面的三道防线组成了如图4-1 所示的三道坚固的安全保护壁垒,就像三道坚固的城墙
一样保护这MySQL 数据库中的数据。只要保障足够,基本很难有人能够攻破这三道防线。
四、代码:
1、SQL 语句相关安全因素:
“SQL 注入攻击”这个术语我想大部分读者朋友都听说过了?指的就是攻击者根据数据
库的SQL 语句解析器的原理,利用程序中对客户端所提交数据的校验漏洞,从而通过程序动
态提交数据接口提交非法数据,达到攻击者的入侵目的。
“SQL 注入攻击”的破坏性非常的大,轻者造成数据被窃取,重者数据遭到破坏,甚至
可能丢失全部的数据。如果读者朋友还不是太清楚何为“SQL 注入攻击”,建议通过互联网
搜索一下,可以得到非常多非常详细的介绍及案例分析,这里有不做详细介绍了。
2、程序代码相关安全因素:
程序代码如果权限校验不够仔细而存在安全漏洞,则同样可能会被入侵者利用,达到窃
取数据等目的。比如,一个存在安全漏洞的信息管理系统,很容易就可能窃取到其他一些系
统的登入口令。之后,就能堂而皇之的轻松登录相关系统达到窃取相关数据的目的。甚至还
可能通过应用系统中保存不善的数据库系统连接登录口令,从而带来更大的损失。