我們有一個應用程序安裝在許多客戶端的場所。我們正在努力收集將來發送給我們的信息。我們希望確保我們能夠檢測到我們的任何數據是否被修改以及是否有數據被刪除。防止SQL數據庫中的數據欺詐和刪除
爲了防止數據被修改,我們目前使用散列表行並將散列與數據一起發送。但是,我們正在努力檢測數據是否已被刪除。例如,如果我們在表中插入10條記錄並散列每行,用戶將無法修改記錄,但是如果他們刪除了所有記錄,那麼我們就無法將其與初始安裝區分開來。
約束:
- 客戶有管理員角色DB
- 應用程序和數據庫將是後面的DMZ,將無法連接外部服務
- 客戶將能夠配置文件的任何sql命令並能夠複製我們所做的任何初始設置。 (以清除他們的客戶也可以刪除/重新創建表)
- 雖然客戶端可以刪除數據和表,但是在審計過程中如果刪除或刪除對我們來說顯而易見,那麼他們應該始終在積累數據並且丟失數據或截斷數據會很突出。我們希望能夠在其餘表格中檢測到刪除和欺詐行爲。
- 我們正在假設客戶將無法逆轉我們的代碼庫或散列/加密數據本身
- 客戶將向我們發送每月收集的所有數據,系統將由我們每年審覈一次。
- 還可以考慮他們的客戶端可以將數據庫的備份或虛擬機的快照恢復到「良好」狀態,然後如果他們想銷燬數據,則回滾到「良好」狀態。我們不希望直接對vm快照或db備份進行任何檢測。
到目前爲止,我們唯一的解決方案是加密安裝日期(可以修改)和實例名稱。然後每分鐘「增加」加密的數據。當我們將數據添加到系統中時,我們對數據行進行散列並將散列粘貼到加密數據中。然後繼續「增加」數據。然後,當發送每月數據時,我們可以看到他們是否正在刪除數據,並將數據庫重新安裝回安裝後,因爲加密值不會有任何增量,或者會有額外的散列不屬於任何數據。
感謝
沒有,因爲如果他們放棄表格並重新創建它,那麼數據將被清除,謝謝你的答案 –
@DavidWork,我對答案做了重大改寫。請檢查出來。 –
感謝您的更新。這絕對涵蓋了我們希望檢測的更多內容。我真正喜歡的一件事是,應用程序實際上可以刪除記錄並在hash_control表中重新創建散列,而不是僅執行軟刪除。我們也能夠知道哪些/多少行被刪除。 –