2010-05-04 49 views
9

我看到有關於所有表以下審計列許多數據庫設計...爲什麼我們需要數據庫表中的審覈列?

  • 創建
  • 創建日期時間
  • 更新通過
  • Upldated日期時間

從一個透視我從下面的視角看錶格...

  • 實體表:
    • 審計列很好的候選人)
  • 參考表:
    • 審計列可能會或可能不是必需的。在某些情況下,最後的更新信息,根本不需要,因爲記錄是永遠不會被修改。)
  • 參考數據表
    • 像國名,實體狀態等等......可以不要求審計列因爲這些信息僅在系統安裝期間創建,並且永遠不會改變。

我見過很多設計師一味地把所有審計列所有表,就是這種做法很好,如果是的話可能是什麼原因?

我只是想知道,因爲我這似乎不合邏輯。我很難弄清楚他們爲什麼要這樣設計他們的數據庫?我並不是說他們錯了或對,只是想知道爲什麼?

你也可以給我建議,如果有另一種審計拍打或可用的解決方案......

感謝和問候

+3

順便說一句國家名稱確實有變化,您應該定期刷新它們。 – HLGEM 2010-05-04 18:47:03

+0

@HLGEM +1!此外,州,城市,村莊...你必須花時間保持地理參考數據當前 – 2011-12-28 15:59:59

+0

這裏的問題是,是否需要把審計列放在桌子上,即使你知道它永遠不會改變? – 2011-12-29 06:16:37

回答

1

許多應用程序使用的是一些在通常不存在像類OOP語言開發業務對象包含什麼是通常有用的信息,如這樣的審計字段。並不是所有的子類實體都可能需要它,但是如果他們這樣做的話,它就在那裏。由於數據庫的開銷很小,並且客戶可能會根據審計字段請求另一個奇數統計,所以最好讓他們到處都是,而不是根本沒有他們。如果東西代表一個靜態的信息列表,例如國名,我通常不會把它放在數據庫中 - 枚舉數據類型是爲了這種目的而創建的。

5

數據審計是許多業務系統所需的內部控制(出於某些原因,請參閱Sarbanes Oxley)。它必須在數據庫級別,以確保所有更改都被捕獲,尤其是未授權的

即使使用查找表,一個未經授權的更改可能會在您的系統中產生havok,因此瞭解是誰進行了更改以及何時進行更改非常重要。什麼時候是特別重要的,因爲它可以幫助dbas知道在多久之後才能獲得備份,以便意外或惡意更改信息。

我們喜歡認爲我們所有的員工都值得信賴,但是許多盜用個人數據和惡意破壞公司數據的內容來自內部來源(這就是爲什麼有許多心存不滿的員工是危險的)所有的欺詐行爲。但大多數程序員似乎認爲他們只需要防範外部威脅。

當然,你仍然會有一些人可以做出未經授權的更改,但是你不能阻止系統管理員這樣做。但通過審計,至少可以限制數據損壞的可能性(並且在僱用dbas時並且在數據庫服務器上不允許其他人擁有管理員權限時特別小心)。

2

這些列是爲了DBA和數據庫開發人員的利益。他們只是提供一個快速機制來回答諸如「這個記錄最後一次變化的時間?」 「誰改變了它?」它們不夠健壯或不夠細緻,不足以滿足SOX,HIPAA或任何其他要求。

在每張桌子上放置這些列就簡單多了。所有數據都可以更改,因此瞭解更改何時發生很有用,特別是如果數據不應該更改。通過使用數據字典生成腳本,可以自動完成添加它們的過程。

通過觸發器或某些類似的機制,這些列獨立於應用程序進行填充是一種很好的做法。這些列是元數據,應用程序不應該真正意識到它們。

依靠全面的審計跟蹤來提供此功能通常不是一種選擇。爲達標目的收集的審計數據通常具有受限的訪問權限,實際上可能存儲在單獨的物理位置。

0

我碰巧碰到了這個帖子,因爲今天早上我腦海中出現了同樣的問題。每個答案都有重要意義,我絕對同意你們所有人的觀點。保護業務數據和交易數據無可否認。相反,作者對某些配置或靜態數據的審計字段感到懷疑。

這種配置數據不能由用戶更新。通常它們也可以放在其他地方,比如屬性,配置文件甚至是硬編碼的常量。當然,將配置數據放在這些地方可能是不好的設計或風格,但從審計的角度來看,它們是否重要?另外,如果這些數據可以由用戶更新,那麼唯一可以更新的數據是dba或黑客。真正的惡意dba或黑客在破壞法律之前就已經知道了法律,他們確實找到了規避法律的方法。

對我來說,這個問題與你公司的環境更相關。貴公司是否有跟蹤每一點微小信息的文化?貴公司是否經常執行嚴格的紀律,監督或審計?擁有這些非用戶數據的審計字段只是爲了滿足他們的需求,而不是其他任何目的。

相關問題