2013-02-02 17 views
1

是否有任何SQL Server數據庫實例特有的東西可以檢測到它已恢復。如果客戶端正在使用數據庫並決定在不同的服務器上恢復並運行同一數據庫的另一個副本 - 是否有辦法通過t-sql查詢區分兩者之間的區別?如何檢測SQ​​L Server數據庫已恢復

回答

5

有幾種方法來識別數據庫中以另一個數據庫的恢復/複製:

  • service_broker_guid通常是最簡單的方法。它在創建數據庫時生成,並在還原/附加操作期間保留。它可以使用ALTER DATABASE ... SET NEW_BROKER;明確更改,因此不同的GUID不一定意味着不同的DB。但是相同的GUID意味着數據庫的共同來源。
  • dbi_familyGUID是在還原時保留的未記錄的引導頁字段。
  • 記錄的恢復路徑和recovery fork LSNs可用於識別共同起源,但它們發散很快,並且即使最近恢復的數據庫也會通過簡單地使用叉LSN很快失去與另一個數據庫共同起源的蹤跡。
  • 加密數據庫(TDE)可以通過頁面隨機數(無證方法,需要專家知識)很容易地識別,只要加密密鑰不變(即不強制全部重新加密,不會丟失所有隨機數)
  • 應用層方法可以使用代碼簽名:生成一個密鑰對,簽署一個虛擬模塊,放棄私鑰。由於簽名永遠不會被重新生成(私鑰永久刪除),數據庫的副本不能隱藏它的原點沒有丟簽名,這顯然是tamper evident

正如你所看到的,有幾種方法,需要的專業水平和o f他們提供的篡改證據。它歸結爲您的要求和實際使用案例。最終,請記住,SQL Server是而非是DRM產品。如果你有一些你認爲無價的代碼/設計必須得到保護,那麼你應該提供應用程序作爲託管服務,這樣這個感知的IP永遠不會離開你的物理控制環境。