提升 MySQL 数据安全性

Posted by icoding168 on 2020-03-09 21:46:01

分类: MySQL  

开发和维护系统的过程中,不管是程序员还是 DBA ,都有可能会执行了一些没有带过滤条件的 update 或 delete 语句,导致全表数据被误改误删,系统的业务逻辑无法正常运行。

针对这种情况,MySQL 提供了一个 sql_safe_updates 参数,这个参数配置后就可以让不带过滤条件的 update/delete 语句执行失败。

sql_safe_updates 参数的默认值是 0,表示不开启安全更新,设置为 1 则表示开启安全更新。

开启安全更新后,update 语句要正常执行的话,必须满足以下三种情况之一:

  • 使用了 where 子句,并且 where 子句的查询条件带有索引
  • 使用了 limit 子句
  • 上面两种情况同时存在

delete 语句要正常执行的话,则更加严格,不仅要求使用 where 子句,并且 where 子句的查询条件必须带有索引,而且还必须加上 limit 子句。

开启安全更新后,以下三种情况的 SQL 语句都不会被 MySQL 执行:

  • update 语句没有加 where 条件
  • update 语句加了 where 条件,并且 where 条件字段没有设置索引
  • delete 语句没有加 where 条件,或者 where 条件字段没有设置索引