如果我有 10,000 个用户并且主键是一个从 1 到 10,000 的唯一 ID,有没有办法给他们一个唯一的 ID,这样就无法从中推断出原始主键?
例如,链接到您的 Facebook 个人资料或类似内容将是 http://site.com/profile?id=293852
有没有可能id和他们用户在数据库中的主键一样?我正在努力想出一种方法来拥有两个不相关的唯一 ID 列,因为随机生成的列必须是唯一的。我想如果有可能只使用数字的 GUID 长度会太长。
和想法?
最佳答案
您通常有两种选择:
- 如您所说,使用随机生成的数据。 (您只需要确保它们是唯一的,即要么足够长,要么生成-验证-重试。)
- 获取主键并将其“伪随机”转换为其他似乎与主键无关的东西。转换可能非常简单(如果您只需要温和的保护),例如
new Random(primaryKey).NextInt()
,或者它可能相当复杂,但可以抵御攻击,例如任何一种Format-preserving encryption .
但是……为什么您认为应该保护主键的值?如果唯一的原因是防止用户猜测其他有效用户 ID,您可以将一个随机字符串附加到主键(并将其存储在数据库中并在访问时验证其正确性)。
关于asp.net - 如何在不使用数据库中的主键的情况下为用户提供唯一 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991222/