MySQL的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 。能更改的只有当前会话操作。全局设置会出现没有权限。

([email protected]) [(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

([email protected]) [(none)]> set  sql_safe_updates = 1;

Query OK, 0 rows affected (0.00 sec)

你可能感兴趣的:(MySQL的SQL_SAFE_UPDATES 设置说明)