asp.net - 如何在不使用数据库中的主键的情况下为用户提供唯一 ID?

标签 asp.net sql unique-index

如果我有 10,000 个用户并且主键是一个从 1 到 10,000 的唯一 ID,有没有办法给他们一个唯一的 ID,这样就无法从中推断出原始主键?

例如,链接到您的 Facebook 个人资料或类似内容将是 http://site.com/profile?id=293852

有没有可能id和他们用户在数据库中的主键一样?我正在努力想出一种方法来拥有两个不相关的唯一 ID 列,因为随机生成的列必须是唯一的。我想如果有可能只使用数字的 GUID 长度会太长。

和想法?

最佳答案

您通常有两种选择:

  1. 如您所说,使用随机生成的数据。 (您只需要确保它们是唯一的,即要么足够长,要么生成-验证-重试。)
  2. 获取主键并将其“伪随机”转换为其他似乎与主键无关的东西。转换可能非常简单(如果您只需要温和的保护),例如new Random(primaryKey).NextInt(),或者它可能相当复杂,但可以抵御攻击,例如任何一种Format-preserving encryption .

但是……为什么您认为应该保护主键的值?如果唯一的原因是防止用户猜测其他有效用户 ID,您可以将一个随机字符串附加到主键(并将其存储在数据库中并在访问时验证其正确性)。

关于asp.net - 如何在不使用数据库中的主键的情况下为用户提供唯一 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4991222/

相关文章:

asp.net - 导航菜单 - 渲染分隔管道字符

c# - 调用嵌套的 RepeaterItem

SQL更新: previous updated columns value in further columns

SQL:获取从左连接返回的行数

Mysql 5.7.13 innodb 唯一列 varchar(500)

sqlite - 尝试向SQLite表中添加UNIQUE INDEX时为什么出现“索引列不是唯一的”错误?

sql - PostgreSQL:唯一约束或唯一索引

c# - 生产服务器上的 SQL Server 2000 间歇性连接异常 - 特定环境问题?

sql - 选择性在索引扫描/搜索中的作用

c# - ASP.NET 按日期范围对多个 SQL 数据库表进行排序