【迪B课堂】MySQL误删数据如何规避?

2019-05-16 15:00:00 浏览数 (1)

点击上方蓝字关注每天学习数据库

【迪B课堂】为腾讯云数据库产品经理迪B哥开设的面向数据库开发者、数据库运维人员、云端运维人员的系列培训课程,旨在为开发者解决数据库选择和使用过程中遇到的问题。《我说》为迪B课堂的答疑系列,3分钟帮您解决数据库日常运维过程中的小难题。搜索关注腾讯云数据库官方微信,立得10元云代金券,可移动端一键管理数据库。

本期解答的问题是:MySQL误删数据如何规避?

视频核心信息:

关于腾讯云数据库审计

审计策略

定义对哪些用户行为进行审计以及如何响应的策略。 【审核策略】=【审核对象】 【审计规则】 【响应动作】 即配置一条审计策略,需要指定审计内容,如果经过解析,某些(用户或系统)行为的特征正好符合某个审计规则,且恰好在策略生效时间,审计引擎就会按照此策略定义的响应方式进行响应,例如告警等。

审计规则

审计策略中,规定了需要审计的一系列行为的集合,称为规则。规则由规则参数组成,每个规则参数定义了一种具体的行为匹配特征。

产品能力与限制条件

腾讯云提供数据库审计能力,审计日志默认保存 15 天(后续版本可延长保存时间),帮助企业对可能存在的数据库访问进行风险控制,提高数据安全等级。

注意事项

数据库审计目前支持:TencentDB for MySQL 5.6 版本,暂不支持 TencentDB for MySQL 5.5 版本以及 5.7 版本。

一、如何进行审计操作?

开通数据库审计

  1. 登录 腾讯云官网 ,单击产品面板【数据库审计】,跳转页面后,单击【审计规则】中右侧的【新建规则】。

注意: 数据库审计支持 5.6 版本,需要升级审计内核的用户,可单击页面中【立即升级】进行升级。

  1. 填写所需审计方式,单击【创建】即可

启用审计规则

  1. 单击左侧导航页【审计策略】,跳转页面后单击【新建策略】。
  1. 选择目标审计实例和所需启动的审计规则,单击【确定】即可启动。
  1. 单击所需策略右侧【修改】。
  1. 跳转页面后单击【是否启用】右侧滑块,单击【确定】即可关闭审计规则。

查看审计效果

单击左侧导航页【审计日志】,可查看审计效果。

基于条件定位

  1. 单击左侧导航页【审计日志】,可单击右侧时间框,选择所需时间段,可查看所选时间段内相关审计效果。
  1. 可单击右侧审计实例框,选择所需实例,查看相关审计效果。
  1. 可在右侧文本框输入关键标签进行搜索,查看相关审计效果。

说明: 可在文本框输入多组关键标签进行搜索,使用回车键分割关键标签。

  1. 可在右侧文本框输入关键 SQL 命令组合进行搜索,查看相关审计效果。

说明: 可在文本框输入 SQL 命令、客户端 IP、帐号、数据库、对象名、策略名、执行时间范围、影响行数数量等关键组合信息。

二、SQL审计规则

规则内容

支持以下类型设置: 客户端 IP,数据库帐户,数据库名,表名,SQL命令,SQL类型,影响行数,执行时间。

  • 客户端 IP,数据库帐户,数据库名,表名支持【包含,不包含,等于,不等于,正则】方式匹配;
  • SQL命令支持【包含,不包含,正则】方式匹配;
  • SQL类型支持【等于,不等于】方式匹配;
  • 影响行数,执行时间支持【>,<,>=,<=,=】方式匹配。

全量审计规则,该规则为特殊规则,启用后审计所有语句。

规则运算
  1. 每个规则内部不同类型为追加限制条件关系,即与(&&)关系。 如用户名指定为 user1,匹配类型为等于,数据库名指定为 test, 匹配类型为等于,那么仅审计 user1 用户对 test 库的动作,其它忽略。
  2. 规则与规则之间为或(||)关系 。 每个实例可以指定一个或多个审计规则,只要符合任意一个规则,就应该审计。如 A 规则指定只审计 user1 的执行时间 >=1秒的操作,B 规则审计 user1 并且执行时间 <1的语句,那么最终对 user1 所有语句都要审计。

规则详解

  • 对于客户端IP,数据库帐户,数据库名,表名支持【包含,不包含,等于,不等于,正则】运算,一次只支持一个运算符设置,如“不等于”。当“等于”和“不等于”时,可以写多个值,多个值之间用逗号分隔,正则、包含、不包含只能写唯一值。如运算符为”相等“,值可以为 user1,user2,user3, “正则”则只能写一个值。
  • SQL命令支持 【包含,不包含,正则】方式匹配,同上只支持一个运算符,正则、包含、不包含为一个值,其它可以写多个值。
  • SQL类型支持【等于,不等于】方式匹配,同上只支持一个运算符,多个值。这里的值的范围为: 【1. SELECT, 2. INSERT, 3. UPDATE, 4. DELETE, 5. CREATE, 6. DROP, 7. ALTER, 8. REPLACE, 9. SET,10. EXECUTE】 为了便于客户设置时简单,每个项SQL类型都对应一个或多个sql动作,一共对应40多种后台类型,每个项与数据库操作类型对应关系如下: 除上面类型外其它类型显示为 OTHER。 【11.LOGIN,12.LOGOUT,13.CHANGEUSER】是登录相关的操作,默认都会被审计,无需用户设置规则。
    1. SELECT, SQLCOM_SELECT
    2. INSERT, SQLCOM_INSERT, SQLCOM_INSERT_SELECT,
    3. UPDATE, SQLCOM_UPDATE, SQLCOM_UPDATE_MULTI
    4. DELETE, SQLCOM_DELETE, SQLCOM_DELETE_MULTI, SQLCOM_TRUNCATE
    5. CREATE, SQLCOM_CREATE_TABLE, SQLCOM_CREATE_INDEX, SQLCOM_CREATE_DB, SQLCOM_CREATE_FUNCTION, SQLCOM_CREATE_PROCEDURE, SQLCOM_CREATE_SPFUNCTION,SQLCOM_CREATE_USER,SQLCOM_CREATE_VIEW,SQLCOM_CREATE_TRIGGER,SQLCOM_CREATE_SERVER,SQLCOM_CREATE_EVENT,
    6. DROP, SQLCOM_DROP_TABLE, SQLCOM_DROP_INDEX, SQLCOM_DROP_DB, SQLCOM_DROP_FUNCTION, SQLCOM_DROP_USER, SQLCOM_DROP_PROCEDURE, SQLCOM_DROP_VIEW,SQLCOM_DROP_TRIGGER,SQLCOM_DROP_SERVER, SQLCOM_DROP_EVENT,
    7. ALTER, SQLCOM_ALTER_TABLE, SQLCOM_ALTER_DB, SQLCOM_ALTER_PROCEDURE, SQLCOM_ALTER_FUNCTION, SQLCOM_ALTER_TABLESPACE, SQLCOM_ALTER_SERVER,SQLCOM_ALTER_EVENT,SQLCOM_ALTER_DB_UPGRADE,SQLCOM_ALTER_USER,
    8. REPLACE, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT,
    9. SET SQLCOM_SET_OPTION, SQLCOM_RESET,
    10. EXECUTE SQLCOM_EXECUTE
  • 影响行数,执行时间支持【>,<,>=,<=,=】方式匹配,只支持一个运算符和一个值方式设置,如执行时间 > 1000 。
表对象规则处理

我们支持表对象审计,允许用户基于表设置审计规则,为保证能取到表信息,当前只对以下类型的动作取表名和数据库名,其它类型操作将不会取语句中的表名和数据库名:

代码语言:javascript复制
SQLCOM_SELECT, SQLCOM_CREATE_TABLE, SQLCOM_CREATE_INDEX, SQLCOM_ALTER_TABLE,
SQLCOM_UPDATE, SQLCOM_INSERT, SQLCOM_INSERT_SELECT, SQLCOM_DELETE, SQLCOM_TRUNCATE, SQLCOM_DROP_TABLE

出于性能方面及实际场景使用考虑,当前只取一个语句中的前 64 个表名数据库名,且不去重复。

例如,设置规则为审计 SELECT 动作,表名为 t1,那么只对 t1 上所有 select 动作都会审计。如果是 execute 方式执行的 select,当前不会取表和数据库名信息,不能被这条规则审计。

对于数据库名的说明

如果是上面的表对象类型的语句,即以下:

代码语言:javascript复制
SQLCOM_SELECT, SQLCOM_CREATE_TABLE, SQLCOM_CREATE_INDEX, SQLCOM_ALTER_TABLE,
SQLCOM_UPDATE, SQLCOM_INSERT, SQLCOM_INSERT_SELECT, SQLCOM_DELETE, SQLCOM_TRUNCATE, SQLCOM_DROP_TABLE

类型动作时,数据库名以语句中实际操作的数据库名为准。例如,当前是 use db3 库,语句为:

代码语言:javascript复制
select *from db1.test,db2.test;

那么会以 db1 和 db2 作为目标库进行规则判断,如果规则配置要审计 db1 的库则会进行审计,规则配置要审计 db3 的库则不会进行审计。

如果不是上面的表对象类型语句,以当前 use 的库作为目标库进行判断。如当前库为 use db1; 执行语句为show databases;

那么以当前库 db1 作为目标库进行规则判断,若规则配置审计db1则会进行审计。

对于影响行数,执行时间,规则设置取值范围为【0~999999999】,其它值为无效值,执行时间单位是微秒。

特别说明

正则、包含、不包含只能写一个值;如果写多个会被当成一个串,造成匹配不对。

正则表达式的不包含多个串规则较为复杂(如非100.200.100.100,100.200.100.101这两个 IP 来的请求要审计),如果需要用到此类规则,可以写到不包含规则里,以竖线连接。例如: 100.200.100.100|100.200.100.101,竖线两边不能有空格。这种方式可以实现多个串模糊否定。

作者简介:

刘迪,腾讯云数据库产品经理,中国计算机行业协会开源数据库专业委员会副会长。现就职于腾讯公司腾讯云数据库(TencentDB)产品团队,曾负责腾讯公司OMG(现PCG)事业群MySQL、MongoDB、Redis数据库平台的管理、建设以及相关运维工作,主要服务腾讯视频,企鹅号,腾讯网,腾讯新闻,腾讯体育等业务。曾受邀作为分享嘉宾参与MongoDB中文社区大会,同时也在腾讯云学院、公众号等媒体平台制作《迪B课堂》、《我说》等数据库教学科普类节目。

往期推荐

《迪B课堂:如何正确的选择云数据库》

《使用JSON类型选择MongoDB还是MySQL?》

《迪B课堂:关于MySQL备份周期》

《迪B课堂:MySQL运行时系统CPU压力大怎么办?》

《MySQL的show proceslist中存在大量sleep的隐患?》

《迪B课堂:详解MySQL的性能监控》

《迪B课堂:NUMA为什么会导致MySQL性能下降》

羊毛速薅

腾讯云数据库新春采购秒杀低至2.8折,09:00, 11:00, 14:00, 16:00, 19:00每天五场秒杀嗨购新春!点阅读原文即可进入会场,记得定好闹钟抢购哦~

↓↓点这儿抄底价

好文和朋友一起看!

var first_sceen__time = ( new Date());if ("" == 1 && document.getElementById('js_content')) { document.getElementById('js_content').addEventListener("selectstart",function(e){ e.preventDefault(); }); } (function(){ if (navigator.userAgent.indexOf("WindowsWechat") != -1){ var link = document.createElement('link'); var head = document.getElementsByTagName('head')[0]; link.rel = 'stylesheet'; link.type = 'text/css'; link.href = "//res.wx.qq.com/mmbizwap/zh_CN/htmledition/style/page/appmsg_new/winwx45ba31.css"; head.appendChild(link); } })();

TencentDB

赞赏

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

阅读原文

阅读

分享 在看

已同步到看一看

取消 发送

我知道了

朋友会在“发现-看一看”看到你“在看”的内容

确定

已同步到看一看写下你的想法

最多200字,当前共字 发送

已发送

朋友将在看一看看到

确定

写下你的想法...

取消

发布到看一看

确定

最多200字,当前共字

发送中

微信扫一扫 关注该公众号

微信扫一扫 使用小程序

即将打开""小程序

取消 打开

0 人点赞