我最近移動了公司,他們在SQL Server中做了一些我從未見過的事情。我習慣於使用主鍵列作爲插入時遞增的int,偶爾我見過使用GUID,但在這裏它們使用兩者,見下文。SQL Server Int主鍵和Guid
PrimaryID | GUID | RestOfColumns
我不明白爲什麼?當問這個問題時,他們告訴我這是針對SQL注入的另一層保護。在存儲過程中,他們使用guid來查找主鍵ID,然後使用該ID,但我個人無法看到其好處?
我的問題是:
- 是否有任何安全隱患暴露在代碼中的主鍵?
- 使用guid獲取主鍵有什麼好處嗎?
編輯:
使用(僞碼)的實例:
- 我需要一個接觸。
- 從QueryString中檢索聯繫人Guid。
- 調用SQL Server存儲過程來獲取聯繫人。
- 在存儲過程中:根據guid找到聯繫人表中的id。
- 使用id在其他表中使用id作爲外鍵獲取相關值。
- 返回數據。
「防止SQL注入的另一層保護」???認真?聽起來像某個人不知道爲什麼使用一對流行語來做這件事,使它聽起來非常酷。如果他們參數化他們的sql沒有sql注入的風險。當您直接通過sql或動態sql執行參數值時會發生這種情況。這一切似乎對我來說有點矯枉過正,但實際的實施並不清楚你的帖子。 –
我同意@SeanLange,聽起來像讀了幾篇文章,把兩個和兩個放在一起,並提出了五個。 –
Somehting其他人向我提到的是,使用INT ID在SQL中搜索更快,但它更安全地揭示邏輯中的GUID。所以「安全」的guid被用來在sql中獲得「更快」的id。這可能是我缺乏sql知識,但這似乎是對的。我試圖收集足夠的信息,以便說服他們開始使用更加標準化的做法。 – Srb1313711