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

netcat20000
发布于 2022-7-14 16:00
浏览
0收藏

 

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

 

视频核心信息:

【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区

关于腾讯云数据库审计

 

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

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

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

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

 

一、如何进行审计操作?

开通数据库审计

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

【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区 

注意

数据库审计支持 5.6 版本,需要升级审计内核的用户,可单击页面中【立即升级】进行升级。
2.填写所需审计方式,单击【创建】即可 

【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区

启用审计规则
1.单击左侧导航页【审计策略】,跳转页面后单击【新建策略】。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区
2.选择目标审计实例和所需启动的审计规则,单击【确定】即可启动。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区
3.单击所需策略右侧【修改】。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区
4.跳转页面后单击【是否启用】右侧滑块,单击【确定】即可关闭审计规则。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区
查看审计效果
单击左侧导航页【审计日志】,可查看审计效果。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区

基于条件定位
1.单击左侧导航页【审计日志】,可单击右侧时间框,选择所需时间段,可查看所选时间段内相关审计效果。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区
2.可单击右侧审计实例框,选择所需实例,查看相关审计效果。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区
3.可在右侧文本框输入关键标签进行搜索,查看相关审计效果。
 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区

说明:

可在文本框输入多组关键标签进行搜索,使用回车键分割关键标签。
4.可在右侧文本框输入关键 SQL 命令组合进行搜索,查看相关审计效果。

 【迪B课堂】MySQL误删数据如何规避?-鸿蒙开发者社区
说明:

可在文本框输入 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】是登录相关的操作,默认都会被审计,无需用户设置规则。
SELECT, SQLCOM_SELECT
INSERT, SQLCOM_INSERT, SQLCOM_INSERT_SELECT,
UPDATE, SQLCOM_UPDATE, SQLCOM_UPDATE_MULTI
DELETE, SQLCOM_DELETE, SQLCOM_DELETE_MULTI, SQLCOM_TRUNCATE
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,
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,
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,
REPLACE, SQLCOM_REPLACE, SQLCOM_REPLACE_SELECT,
SET SQLCOM_SET_OPTION, SQLCOM_RESET,
EXECUTE SQLCOM_EXECUTE

  • 影响行数,执行时间支持【>,<,>=,<=,=】方式匹配,只支持一个运算符和一个值方式设置,如执行时间 > 1000 。
    表对象规则处理
    我们支持表对象审计,允许用户基于表设置审计规则,为保证能取到表信息,当前只对以下类型的动作取表名和数据库名,其它类型操作将不会取语句中的表名和数据库名:
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,当前不会取表和数据库名信息,不能被这条规则审计。

对于数据库名的说明
如果是上面的表对象类型的语句,即以下:

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 库,语句为:

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课堂》、《我说》等数据库教学科普类节目。

 

文章转自公众号:腾讯云数据库

分类
标签
已于2022-7-14 16:00:35修改
收藏
回复
举报
回复
    相关推荐