2009-05-28 107 views
0

關於更新實體數據以及如何最好地處理它,我的團隊進行了一些討論。這是一個安全框架,所以這裏有一些限制和想法。實體更新策略

  1. DB中的每個表都有一個PK,它是一個GUID,這是我們的多節點集羣解決方案所必需的。我們的想法是,我們不希望通過API向客戶公開此實體,因爲它可以做兩件事,
    1. 給他們提供他們工作所需的更多信息,並給予黑客更多關於系統的信息。
    2. 支持惡夢是一個客戶端以某種方式硬編碼到這個ID,如果我們需要改變我們PK的客戶端受到影響。

解決方案,露出像一個獨特的角色名稱的對象和領域項目的博物關鍵,在一起機制保障獨特但更新這兩個值中是一個挑戰,因爲你需要指定老和新值更新,或傳遞原始對象和新對象中的兩個對象,以便我們可以找到要更新的對象。有點凌亂,

另一種方法是做一個備用鑰匙,並將其暴露給客戶,他們可以使用它的所有他們想要的,我們不關心,因爲它不綁定到我們的PK。

似乎現在每個人都只是將PK作爲身份證用於沒有任何問題的實體,不確定如何說服我們的團隊從古老的編程日開始。

另一個問題是如何支持部分更新,問題是你有10個屬性,4個集合等實體...與名稱+領域組合,並指定要更新的屬性,而不是拉下整個對象更改1字段,發回更新。我說延遲加載集合,但不知道部分更新是否合理。

想法?

謝謝!

+0

因爲我們有我們必須使用GUID /唯一標識符,主鍵一個分佈式數據庫,並且通過使數據庫集羣處於活動狀態,類似於Oracle RAC,但這是使用MS Sql,問題是不支持標識列,因爲您可以插入任何節點,並且該值可能不要unqiue或已經被使用,只要使用一個GUID就簡單多了。 – Enigmae 2009-05-28 13:40:08

回答

1

我的安全框架的做法是這樣的:

  • 給任何數據庫中的內部ID(標識列,序列,無論你的數據庫支持在「本地生成的ID列」休眠說)。最終,你會需要它,而且適應性強是很多工作。

  • 如果您需要向用戶提供一個ID,請生成一個隨機數,檢查它是否已被使用,將其連接到一個內部ID,然後將其交給用戶。 從不發出內部ID和從來沒有使用可以被猜餅乾猜出的ID。

至於部分更新,如果你有很多具有很多屬性的對象,它們纔會有意義。對於10個屬性,我會說「premature optimization。「

0

如果您需要將ID公開給客戶端,請使用自然鍵。這不是很容易實現,但這是正確的方法。

您能否提供關於這些部分更新的更多細節?我沒有明白。 :/

0

在每張表上使用GUID作爲主鍵聽起來像是在問問題,除非我真的誤解了你,否則我沒有看到這種方法在哪裏,爲什麼不直接向每個用戶發佈UID並使用UID呢?

這種方法是在所有公司最常見的。UID是不是PII所以你好嗎法律因爲是作爲從安全角度來看。