【发布时间】:2015-11-11 16:21:51
【问题描述】:
我最近调动了一些公司,他们在 SQL Server 中做了一些我以前从未见过的事情。我习惯于使用主键列作为在插入时递增的 int,我偶尔会看到使用 guid,但在这里它们同时使用,见下文。
PrimaryID | GUID | RestOfColumns
我的脑袋转不过来,为什么?当问这个问题时,他们告诉我这是防止 SQL 注入的另一层保护。在存储过程中,他们使用 guid 来查找主键 ID,然后无论如何都使用 id,我个人看不到好处吗?
我的问题是:
- 在代码中公开主键是否存在安全风险?
- 使用 guid 获取主键有什么好处吗?
编辑:
使用示例(伪代码):
- 我需要一个联系人。
- 从 QueryString 中检索联系人 Guid。
- 调用 SQL Server 存储过程以获取联系。
- 在存储过程中:根据guid在联系表中查找id。
- 使用 id 作为外键获取其他表中的相关值。
- 返回数据。
【问题讨论】:
-
“针对sql注入的另一层保护”???严重地??听起来有些人不知道为什么要使用几个流行语来让它听起来超级酷。如果他们参数化他们的 sql,就没有 sql 注入的风险。当您通过 sql 或动态 sql 直接执行参数值时,就会发生这种情况。这一切对我来说似乎有点矫枉过正,但你的帖子中并不清楚实际的实现。
-
我同意@SeanLange 的观点,听起来像是一个阅读了几篇文章,将两个和两个放在一起,然后想出了五个的人。
-
向我提到的其他一些事情是使用 INT Ids 在 sql 中搜索更快,但在逻辑中公开 guid 更安全。所以“更安全”的 guid 用于在 sql 中获取“更快”的 id。这可能是我缺乏 sql 知识,但这似乎是正确的。我试图收集足够的信息,以便说服他们开始使用更标准化的做法。
标签: sql .net sql-server