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