SQL_SAFE_UPDATES 设置说明
鉴于以前出现的数据大表误更新和全表误删除操作。影响服务使用和数据安全。
为了防止线上业务出现以下3种情况影响线上服务的正常使用和不小心全表数据删除:
1:没有加where条件的全表更新操作 ;
2:加了where 条件字段,但是where 字段 没有走索引的表更新 ;
3:全表delete 没有加where 条件 或者where 条件没有 走索引。
以上3种情况现在都不能正常进行操作。
会出现以下错误提示:
MySQL:
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
解决方案:
对应错误的表需要增加对应where 条件字段的索引, 如果真要删除全表记录。联系DBA 进行处理。
语法的设置,管理员进入MySQL
分global 和当前会话2种不同的 设置方式。
set global sql_safe_updates = 1 | 0 ;
全局生效
set sql_safe_updates = 1 | 0 ;
当前会话生效
一般开发用户的权限是 select ,update,delete,insert 。能更改的只有当前会话操作。全局设置会出现没有权限。
(test@xxxx) [(none)]> set global sql_safe_updates = 1;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
(test@10.100.108.130) [(none)]> set sql_safe_updates = 1;
Query OK, 0 rows affected (0.00 sec)
数据安全需要规范起来。