我有一个数据库表,其中有一个简单的递增整数作为主键(1、2、3等)。这些数字代表了一所大学的校友,记录中有个人信息。我被要求在向用户显示时(在他们查询数据库之后)给每个记录一个唯一的ID,但是ID不能是主键,它必须是一致的。
例如,如果有人检索了带有任意ID 88gh344r的记录,然后再进行另一次搜索并再次检索记录88gh344r,他们需要能够说“这是同一个人”。因为人们需要能够识别从一个搜索到下一个搜索的标识符,所以ID不可能是长的和复杂的。
我想了三种方法:
其中哪一个是最好的,还是我错过了一个更好的方法?
发布于 2011-03-11 22:49:29
实际上,我只是在URL速记器上写了一个简短的图图,它是在此基础上工作的,使用了一个透明的种子。您可以使用该函数创建查找键,并将其作为代码为这里的“引用”键存储在DB中。
发布于 2011-03-11 22:49:39
如果你这么做是为了保护隐私,那你就是在做一个重大的伪装。用不了多久,最蹩脚的脚本孩子就会编写一个简单的程序,它只会尝试每一个可能的“哈希”,然后加载你的整个列表。
您应该检查正确的访问控制,以便人们只能看到他们可以看到的东西。
发布于 2011-03-11 23:05:47
如果我正确地理解了您,您的主要目标就是不显示主键,而是在与用户交流时使用其他的东西。
最简单的方法:
将CHAR列添加到表中,并选择希望其他标识符为的长度,例如CHAR(16)。
为该列提供唯一的索引,这样就不会有任何重复的索引。
对于每一行,生成一个长度为16的安全*随机*字符串,并更新该行。
不要散列普通主键。如果钥匙从1,2,3开始。然后每个人只要计算1,2,3的散列,就可以将id与hash相匹配.等
另一个问题是,例如,如果表中已经有200行,并且添加了1,那么攻击者可以自动将主键201与列表中刚刚出现的随机字符串关联起来。
另一方面,为什么首先需要隐藏主键。也许您应该加密列中的个人用户数据?
https://stackoverflow.com/questions/5279155
复制相似问题