欢迎投稿

今日深度:

MySQL安全攻防实战指南之体系结构篇(1)(12)

假设我们没有强制执行引用完整性,如果我们利用id 2删除用户joe,如下所示:

 

表accesscontrol中与joe有关的的所有记录仍然在那里。如果我们借助下一个可用的id即2)添加另一个用户的话,那么这个用户就会继承joe在accesscontrol表中的记录。

对于提供引用完整性的数据库来说,我们就可以规定该用户标识为accesscontrol表中的外键,这样,当该用户的记录删除时,那么在accesscontrol中对应的所有记录也会自动删除。

然而,在默认情形下缺乏事务支持也可能会导致安全隐患。举例来说,假设实现前面的系统的公司具有审计每次密码改变的要求, 同时假定使用了如下所示的查询:

 

假定这两次查询之间的服务器连接失败。用户的密码将已经更改,但是系统尚未进行审计。如果我们正在使用非默认的、支持事务的MySQL存储引擎,那么我们就可以在第一个语句之前开始事务,然后在第二个语句之后提交事务,那么密码改变就不会漏掉审计了。

在4.0版本之前,MySQL并不支持UNION语句。由于SQL注入是最常见的数据库攻击形式之一,而UNION又是攻击者的指令表中的关键部分,因此在防御SQL注入攻击方面,通常认为4.0版之前的MySQL要比其他数据库系统更加安全。然而,应用开发人员却对这一局限性颇为不满;此外,如果您运行版本较老的MySQL的话,那就会受到目前已经修复的安全漏洞的威胁。所以,如果有一个功能受限同时又补丁齐全的MySQL就好了,但是看起来这是不可能的。如果读者有志于此的话,抽时间您可以亲自动手试试。

此外,4.1版本之前的MySQL并不支持子查询,下面是一个子查询的例子:

 

由于进行SQL注入攻击时,攻击者通常能控制查询字符串的部分字符,所以如果缺乏子查询的话,那么从安全的角度来说倒是一个优点。然而,现实中如果缺乏某些特性的话,MySQL是很难推荐给管理层的,更别说开发团队了。“缺乏功能”有时候也是有好处的,例如Oracle没有十分详细的错误信息,但是对于SQL Server 来说,这可能从错误信息文本中检索数据,不过还好MySQL并没有效仿这一点。


www.htsjk.Com true http://www.htsjk.com/shujukuaq/16813.html NewsArticle 假设我们没有强制执行引用完整性,如果我们利用 id 2 删除用户 joe ,如下所示: 表accesscontrol中与joe有关的的所有记录仍然在那里。如果我们借助下一个...
评论暂时关闭