我最近移动了公司,他们在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