背景
去年的微盟“删庫跑路”導緻公司市值蒸發10億,前不久的網傳某網際網路公司實習生“删庫”事件也上了頭條,到最近的巴西一個資料庫洩露近30T資料,影響2.2億人,關于資料庫安全的事件從未停止。
資料庫作為業務的資料核心,其安全及性能是所有企業都必須面對的問題。當企業上雲後,如何更加友善的監控雲上資料庫同樣是非常重要的一件事情。
如何更加快速的發現删庫事件?
如何揪出惡意的登入請求?
如何過濾性能需要優化的慢查詢?
。。。
RDS審計中心釋出後,讓問題變得簡單。
監控及告警
RDS審計中心内置最常見的一些告警規則(實際排查過程中可結合實際情況自行調整對應的參數及SQL查詢語句),參考
RDS安全,具體告警設定參考
設定告警,使用者可以聚焦于發現及解決問題本身。廢話不多說,我們直接看看一些常見的場景。
RDS慢SQL
當我們配置
RDS慢SQL檢測後,如果一定時間範圍内觸發了告警,我們将通過配置的相應管道接收到告警消息,比如郵件,
基于告警資訊,我們直接通過
的審計性能中心檢視慢SQL清單Top50,快速找出該異常時間段内的慢SQL語句,此處僅為測試樣例。
實際上,對于使用MySQL類關系型資料庫,讀操作是最多的,而讀操作裡的慢SQL也是最常見的問題,優化的空間及必要性都排在首位,大體可以分為三類:索引優化、SQL語句優化以及表優化,實際上也是一個互相關聯的持續優化過程。
索引優化也是最常見的場景,我們來看一個簡單的例子,如下,很顯然執行了全表掃描,where查詢條件的列沒有加索引。
我們加上索引後,查詢效果提升是非常顯著的
關于索引優化,遵循一些基本規則:
- 經常需要作為where查詢條件的列,建議增加索引,多個查詢條件可以增加複合索引
- 最左字首比對原則
- 選擇區分度盡可能高的列建索引
- 索引的列不能參與函數計算
- 如果可能通過擴充已有索引進行優化,則優先擴充索引,然後才是建立索引
關于SQL語句的優化,基本原則:
- 查詢盡量用具體字段,不用*
- 一般join性能優于子查詢,對于多表join,盡量用小表 join 大表
- 常用查詢可以考慮開啟緩存
- 尤其是對于查詢資料量非常大的情況,加上limit
關于表的優化,一般來說表的字段盡可能用NOT NULL,字段長度固定越有利于查詢,對于大表則需要結合業務進行水準或垂直拆分
總體來說,優化步驟如下:
- 首先利用好explain這個神器
- 了解查詢語句涉及到的表結構及相關索引資訊
- 結合具體業務場景思考可能的優化點
- 驗證優化後的執行效果
- 重複以上步驟
RDS登入失敗異常
RDS登入失敗次數過多告警後,如果一定時間範圍内觸發了告警,我們将通過配置的相應管道接收到告警消息,比如郵件
的審計安全中心檢視登入失敗的IP統計,快速找出該異常時間段内頻繁嘗試登入失敗的IP位址。
進一步地,我們可以點選錯誤最多的用戶端清單框右上角,如下圖,檢視分析詳情,基于告警的觸發時間往前選擇對應的時間間隔,定位具體IP位址,進而進一步評估是否将對應IP加入黑名單處理。
RDS删除資料異常
RDS大批量資料删除告警,同樣在收到告警消息後,如下圖,通過
的審計安全中心,找到大批量删除事件Top50清單框,也可以進一步檢視分析詳情,選擇告警觸發時間段,選擇原始日志,檢視更多審計資訊,快速定位對應時間段的異常删除操作記錄,及時告警,避免有意、無意的删除動作,最大限度的止損。
RDS執行錯誤異常
RDS SQL執行錯誤數過多告警的審計安全中心,找到錯誤最多的用戶端清單框,檢視分析詳情,選擇告警觸發時間段,快速定位對應時間段的錯誤SQL操作記錄,該樣例錯誤為查詢不存在的列名"uid"。
RDS危險SQL操作
RDS危險的SQL執行告警後,同樣在收到告警消息後,如下圖,通過
的審計安全中心,快速定位對應時間段的危險SQL操作記錄,
總結
本文基于一些常見案例,介紹了基于
如何快速定位雲上資料庫問題,并給出了一些處理的建議,也僅僅是作為參考,希望能夠幫助使用者貼合自己的實際業務場景,更省時、省力、準确定位并解決問題。
對我們工作感興趣的,可以通過如下方式了解更多,謝謝關注!
- SLS首頁: https://www.aliyun.com/product/sls
- 知乎: https://zhuanlan.zhihu.com/aliyunlog
- 微信公衆号:日志服務 or LogAnalytics
- 哔哩哔哩: https://space.bilibili.com/630680534