RDS审计中心--数据库安全监控利器

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 依托阿里云SLS日志服务及阿里云RDS SQL审计,以极低的代价采集对SQL执行的所有操作,RDS审计中心提供丰富的内置告警规则,覆盖绝大部分场景的安全、运营、性能报表,只需要做最少的配置即可实现对数据库的全方位监控。

背景

去年的微盟“删库跑路”导致公司市值蒸发10亿,前不久的网传某互联网公司实习生“删库”事件也上了头条,到最近的巴西一个数据库泄露近30T数据,影响2.2亿人,关于数据库安全的事件从未停止。

数据库作为业务的数据核心,其安全及性能是所有企业都必须面对的问题。当企业上云后,如何更加方便的监控云上数据库同样是非常重要的一件事情。

如何更加快速的发现删库事件?

如何揪出恶意的登录请求?

如何过滤性能需要优化的慢查询?

。。。

RDS审计中心发布后,让问题变得简单。

监控及告警

RDS审计中心内置最常见的一些告警规则(实际排查过程中可结合实际情况自行调整对应的参数及SQL查询语句),参考RDS安全,具体告警设定参考设置告警,用户可以聚焦于发现及解决问题本身。废话不多说,我们直接看看一些常见的场景。

RDS慢SQL

当我们配置RDS慢SQL检测后,如果一定时间范围内触发了告警,我们将通过配置的相应渠道接收到告警消息,比如邮件,

基于告警信息,我们直接通过RDS审计中心的审计性能中心查看慢SQL列表Top50,快速找出该异常时间段内的慢SQL语句,此处仅为测试样例。

实际上,对于使用MySQL类关系型数据库,读操作是最多的,而读操作里的慢SQL也是最常见的问题,优化的空间及必要性都排在首位,大体可以分为三类:索引优化、SQL语句优化以及表优化,实际上也是一个相互关联的持续优化过程。

索引优化也是最常见的场景,我们来看一个简单的例子,如下,很显然执行了全表扫描,where查询条件的列没有加索引。

我们加上索引后,查询效果提升是非常显著的

关于索引优化,遵循一些基本规则:

  • 经常需要作为where查询条件的列,建议增加索引,多个查询条件可以增加复合索引
  • 最左前缀匹配原则
  • 选择区分度尽可能高的列建索引
  • 索引的列不能参与函数计算
  • 如果可能通过扩展已有索引进行优化,则优先扩展索引,然后才是新建索引

关于SQL语句的优化,基本原则:

  • 查询尽量用具体字段,不用*
  • 一般join性能优于子查询,对于多表join,尽量用小表 join 大表
  • 常用查询可以考虑开启缓存
  • 尤其是对于查询数据量非常大的情况,加上limit

关于表的优化,一般来说表的字段尽可能用NOT NULL,字段长度固定越有利于查询,对于大表则需要结合业务进行水平或垂直拆分

总体来说,优化步骤如下:

  1. 首先利用好explain这个神器
  2. 了解查询语句涉及到的表结构及相关索引信息
  3. 结合具体业务场景思考可能的优化点
  4. 验证优化后的执行效果
  5. 重复以上步骤

RDS登录失败异常

当我们配置RDS登录失败次数过多告警后,如果一定时间范围内触发了告警,我们将通过配置的相应渠道接收到告警消息,比如邮件

基于告警信息,我们直接通过RDS审计中心的审计安全中心查看登录失败的IP统计,快速找出该异常时间段内频繁尝试登录失败的IP地址。

进一步地,我们可以点击错误最多的客户端列表框右上角,如下图,查看分析详情,基于告警的触发时间往前选择对应的时间间隔,定位具体IP地址,从而进一步评估是否将对应IP加入黑名单处理。

RDS删除数据异常

当我们配置RDS大批量数据删除告警,同样在收到告警消息后,如下图,通过RDS审计中心的审计安全中心,找到大批量删除事件Top50列表框,也可以进一步查看分析详情,选择告警触发时间段,选择原始日志,查看更多审计信息,快速定位对应时间段的异常删除操作记录,及时告警,避免有意、无意的删除动作,最大限度的止损。

RDS执行错误异常

当我们配置RDS SQL执行错误数过多告警,同样在收到告警消息后,如下图,通过RDS审计中心的审计安全中心,找到错误最多的客户端列表框,查看分析详情,选择告警触发时间段,快速定位对应时间段的错误SQL操作记录,该样例错误为查询不存在的列名"uid"。

RDS危险SQL操作

当我们配置RDS危险的SQL执行告警后,同样在收到告警消息后,如下图,通过RDS审计中心的审计安全中心,快速定位对应时间段的危险SQL操作记录,

总结

本文基于一些常见案例,介绍了基于RDS审计中心如何快速定位云上数据库问题,并给出了一些处理的建议,也仅仅是作为参考,希望能够帮助用户贴合自己的实际业务场景,更省时、省力、准确定位并解决问题。


对我们工作感兴趣的,可以通过如下方式了解更多,谢谢关注!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
4月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
424 158
|
3月前
|
SQL 关系型数据库 MySQL
阿里云RDS云数据库全解析:产品功能、收费标准与活动参考
与云服务器ECS一样,关系型数据库RDS也是很多用户上云必买的热门云产品之一,阿里云的云数据库RDS主要包含RDS MySQL、RDS SQL Server、RDS PostgreSQL、RDS MariaDB等几个关系型数据库,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,帮助您解决数据库运维的烦恼。本文为大家介绍阿里云的云数据库 RDS主要产品及计费方式、收费标准以及活动等相关情况,以供参考。
|
4月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
4月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
943 152
|
4月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
785 156
|
4月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
394 156
|
4月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
493 161
|
4月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
4月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
4月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。

推荐镜像

更多