对于我正在构建的数据库,我决定使用自然数作为主键。我知道GUID允许的优点,但是查看数据,行的大部分数据都是GUID键。
我想从数据库数据生成XML记录,自然数的一个问题是我不想将我的数据库密钥暴露给外界,并允许用户猜测“密钥”。我相信GUID正在解决这个问题。
所以,我认为解决方案是生成一个从自然ID派生的稀疏,唯一的iD(希望它是双向的),或者只是在数据库中添加一个额外的列并存储一个guid(或其他一些多字节) id)的
派生值更好,因为没有存储损失,但与GUID相比,它更容易反转和猜测。
我(买)好奇其他人在SO上做了什么,以及他们有什么见解。
答案 0 :(得分:1)
计算“GUID”可以做的是计算带有一些salt(例如表名)的ID的MD5哈希值,将其加载到GUID中并设置几个位以使其有效{{ 3}}
这几乎是双向的,因为您可以拥有一个SQL计算列(在某些情况下也可以编入索引),保留GUID而不将其保留在表中,并且您始终可以使用正确的ID重新计算GUID和盐,这对用户来说应该更难,因为他们不知道盐和实际ID。