運維日記| SQL server 那點事——DML觸發器

2021-02-13 新運維新數據

11月19日,21點,小編正六指霸屏,決賽圈1V4,忽然,電話響了,這種感覺很熟悉,不錯,上次差點推掉對面水晶的那一幕又上演了……作為一名美創的員工,客戶才是第一位,我毫不猶豫的摁下了接聽鍵。

XXX嗎?我資料庫有人篡改了某張表,我一聽,這個問題應該難度不大(自信ing!),趕緊回應客戶:

您資料庫有保留最近一次完整備份以及之後的完整日誌嗎?

1、有的話可以用完整備份恢復+日誌備份(誤操作前的LSN恢復)


2、也可以通過sys.fn_dblog()獲取二進位日誌,再解析出來誤操作的語句進行恢復

結果客戶的需求並不是該操作如何恢復,而是想確定這個篡改表的始作俑者,以及如何去記錄以後資料庫這種類似的情況。我很清楚的告訴客戶,再沒部署任何監控記錄的基礎上,解析日誌也只能獲取相關的數據記錄,無法獲取更過的信息(當然,不排除某種高端工具可能會獲取)。

至於以後如何防患,如何記錄,這個可以通過SQL server觸發器或者審計功能來實現,而本文,將著重介紹DML觸發器以及它如何實現客戶的需求,請看下文。

DML觸發器是一種特殊類型的存儲過程,它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。

可見,因為觸發器的緣故,不滿足要求的數據無法插入(這裡的age>=100雖有悖常理,實則祝大家都長命百歲,哈哈)

 回到我們的主旨,這種觸發器雖然能起到防患的作用,但是依舊無法達到我們預期的效果,我們不僅要防患於未然,更要能事事追蹤溯源,話不多說,請看下文,也是我們這篇文章最最重要的乾貨!!!

實現原理:

DML操作記錄,簡單的說,就是日誌類觸發器,也就是儘量全面地反映資料庫表所進行的insert、update、delete操作,便於日後翻閱。

5、用hostname\administrator執行DML操作:

顯而易見,剛才的6次insert,2次update(一次update對應兩條記錄,因為分別記錄了name的更改前後的值—),以及2次delete,都清楚的記錄在該表內。

眼尖的網友可能要問,USERID和HOSTNAME很清楚,最後這兩列有什麼特殊的含義嗎?

我們的觸發器日誌表如果僅僅記錄一些基礎的信息,還遠遠不夠,我們還要將更改的數據挖掘出來,以便在需要的時候進行逆向DML。

那麼,我們是不是也可以修改日誌表,添加更多我們需要捕獲的信息呢,答案是肯定的,不過這個就交給廣大網友去探索、去更改了……

8、truncate 掉test表,再查看DML日誌表:

可以看到,依舊只有12條記錄,這是為什麼呢?明明test的表都被刪乾淨了啊???

莫慌莫慌,大家都知道,truncate和delete不同,它屬於DDL語句,所以,關於DDL的觸發器,且看下回分解,不要走開哦。

美創運維中心資料庫服務團隊擁有Oracle ACE 1人、OCM 10餘人、數十名Oracle OCP、MySQL OCP、紅帽RHCA、中間件weblogic、tuxedo認證、達夢工程師 ,著有《Oracle DBA實戰攻略》,《Oracle資料庫性能優化方法和最佳實踐》,《Oracle內核技術揭秘》等多本數據運維優化書籍。目前運維各類資料庫合計2000餘套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、達夢等主流商業和開源資料庫。並成為首批國內達夢戰略合作夥伴之一,擁有海量經驗和完善的人員培養體系。並同時提供超融合,私有雲整體解決方案。

相關焦點

  • 資料庫開發-SQL Server觸發器如何使用實例解析
    :create trigger 觸發器的名字on 表名 after insert,update,deleteasbeginsql語句end2、觸發器工作原理SQL Server創建了兩個專用表:inserted和deleted表,這是兩個邏輯表,由系統來維護,不允許用戶直接對著兩個表進行修改。
  • A Comparison between WebScaleSQL and Percona Server
    而 Percona 的人也針對 WebScaleSQL 與 Percona Server 5.6 的比較,寫了一篇技術分析的文章:「A technical WebScaleSQL review and comparison with Percona Server」。
  • 直擊傳統運維痛點,京東金融智能運維初探!
    如何快速確定系統的真正瓶頸點? 面對上述難題,本文將從智能容量評估與智能告警切入,為大家分享京東金融的運維實踐。 智能容量評 應用的容量評估是一個老大難問題,目前也沒有一種簡單而有效的方式,主要是通過壓測手段直接得到應用單機最高 QPS 的相關數據。
  • sqltoy-orm 4.13.8 發版 - OSCHINA - 中文開源技術交流社區
    ,目前以sql id為籤名,便於運維通過資料庫來跟蹤sql的歸屬以mysql為例: 在sql開始部位增加了id,便於運維通過資料庫日誌快速定位問題sql的歸屬```sql/* id=qstart_order_search */  select  ORDER_ID,      DEVICE_TYPE from xxx```感謝網名cmd的用戶反饋此意見
  • 具有記憶功能門電路之基本RS觸發器、同步RS觸發器、D觸發器
    該類電路,即數字電路中的基本RS觸發器、同步RS觸發器、同步D觸發器、主從觸發器、邊緣觸發器等和在此基礎之上的時序邏輯電路,而整個數字電路的大廈,也即由組合邏輯電路和時序邏輯電路所構成。1、基本RS觸發器1)由與非門構成的基本RS觸發器由兩個與非門電路交叉耦合即構成基本的RS觸發器,由於電路中G1、G2作用相同,習慣上用邏輯符號予以表示。
  • 施密特觸發器的特點_施密特觸發器作用
    打開APP 施密特觸發器的特點_施密特觸發器作用 發表於 2018-01-16 16:02:37 施密特觸發器的特點
  • 如何使用 K8s 兩大利器"審計"和"事件"幫你擺脫運維困境?
    概述下面幾個問題,相信廣大 K8s 用戶在日常集群運維中都曾經遇到過:集群中的某個應用被刪除了,誰幹的?Apiserver 的負載突然變高,大量訪問失敗,集群中到底發生了什麼?從騰訊雲容器團隊長期運維 K8s 集群的經驗來看,審計和事件並不是可有可無的東西,善用它們可以極大的提高集群的可觀測性,為運維帶來巨大的便利。下面讓我們先來簡單認識一下它們。什麼是 Kubernetes 審計?
  • 【日記】115輸的時候,說什麼都是找藉口
    01 一句話日記 2020/8/7 語句的時候 不過聽說後續會用註解而不是xml 仔細想想它這樣處理的作用: - 在於將sql語句和Java代碼分開了 以前在dao層中還要寫sql語句的字符串 現在只需要專注於Java代碼即可
  • Mybatis的sql組裝詳解
    上一篇分析了SqlSession執行sql的過程,其中並沒有分析sql是從哪裡來的,今天就來仔細分析下。Sql來源從上一篇的最後一步執行sql那裡倒推sql的來源,源碼主要過程如下圖:可以看到最後是通過BoundSql直接獲取的sql,然後往前倒推最後發現是通過MappedStatement的getBoundSql方法返回的。
  • 「SQL」重點整理
    54、全局變量:SQL server 系統內部事先定義好的變量,不用用戶參與定義,任何程序均可隨時調用。全局變量通常用於存儲一些SQL server的配置設定值和效能統計數據。SQL server一going使用了30多個全局變量。以@@開頭。
  • SQL SERVER 2016中開啟xp_cmdshell運行cmd命令的方法
    RECONFIGURE WITH OVERRIDE EXEC sp_configure 'show advanced options', 0RECONFIGURE WITH OVERRIDE 7.測試xp_cmdshell運行cmd命令,在sql
  • 脈衝和邊沿觸發器區別
    邊沿觸發器,指的是接收時鐘脈衝CP 的某一約定跳變(正跳變或負跳變)來到時的輸入數據。在CP=l 及CP=0 期間以及CP非約定跳變到來時,觸發器不接收數據的觸發器。   邊沿觸發器 具有下列特點的觸發器稱為邊沿觸發方式觸發器,簡稱邊沿觸發器。觸發器接收的是時鐘脈衝CP 的某一約定跳變(正跳變或負跳變)來到時的輸入數據。
  • jk邊沿觸發器工作原理
    >   JK觸發器是數字電路觸發器中的一種基本電路單元。JK觸發器具有置0、置1、保持和翻轉功能,在各類集成觸發器中,JK觸發器的功能最為齊全。在實際應用中,它不僅有很強的通用性,而且能靈活地轉換其他類型的觸發器。由JK觸發器可以構成D觸發器和T觸發器。   JK觸發器工作特性   建立時間:是指輸入信號應先於CP信號到達的時間,用tset表示。
  • 零基礎學FPGA(二)關於觸發器
    本文引用地址:http://www.eepw.com.cn/article/267376.htm  1、關於觸發器的分類  觸發器呢大體可以按這幾個部分分類:1、按電晶體性質分,可以分為BJT集成電路觸發器和MOS型集成電路觸發器。
  • Sql注入攻擊基本原理
    注入可以藉助資料庫的存儲過程進行提權等操作4、判斷Sql注入點4.1 判斷是否存在sql注入漏洞通常情況下,可能存在 Sql 注入漏洞的 Url 是類似這種形式 :http://xxx.xxx.xxx/abcd.php?id=XX對 Sql 注入的判斷,主要有兩個方面:判斷該帶參數的 Url 是否存在 Sql 注入?
  • 在ASP.NET Core中使用dotConnect for SQL Server
    使用設計器創建的SqlConnection對象的默認名稱為sqlConnection1。要在運行時創建新的SQL Connection對象,您應該首先添加對Devart.Data.SqlServer.dll和Devart.Data.dll程序集的引用。下面的代碼段說明了如何在運行時創建SqlConnection。
  • 全面適配IPv6,Jumpserver 堡壘機 V1.5.6 發布丨Release Notes
    順應企業加快IPv6部署的趨勢,Jumpserver堡壘機V1.5.6版本全面適配IPv6網絡環境,主要包括在IPv6網絡環境中運行、納管和運維IPv6網絡的資產。為了更加契合企業用戶的需求,Jumpserver堡壘機從V1.5.6版本開始支持對資料庫應用的授權管理,目前僅支持MySQL 資料庫。
  • Oracle DBA之常用SQL
    有好多人或事,出現計劃外的狀況,最後那句「但,我依然愛你」 最靚虛擬環境的坑確實很多,tsm相關測試還在繼續,暫且整點sql當夜宵吧。語句select dbms_Lob.substr(a.SQL_FULLTEXT) from v$sql a where sql_id='0x7b21d4ed';select dbms_Lob.substr(s.SQL_FULLTEXT) from v$sql s,v$session se,v$process p where se.paddr=p.addr and s.sql_id