向用户显示行的主键是不安全的吗?

时间:2011-08-04 19:27:07

标签: database primary-key url-scheme application-design

为什么许多应用程序在向用户显示记录时用看似随机的替代ID替换数据库的主键?

我的猜测是,它可以防止用户猜测表中的其他行。如果是这样,那不仅仅是虚假的安全感吗?

2 个答案:

答案 0 :(得分:4)

我猜你在这里谈论代理键。代理键的期望或假设优点之一是它们不会受到任何外部含义或对数据库外部任何内容的依赖性的负担。因此,例如可以安全地重新分配代理键值,或者可以重构或丢弃密钥,而不会对系统用户造成任何后果。

通常,代理键对用户隐藏,以便它们不会获得任何此类外部依赖项。事实上,隐藏在用户之下是E.F.Codd提出的代理密​​钥的原始定义的一部分。如果键值位于用户的浏览器缓存或收藏夹列表中,则它们不再用作“代理”。这就是为什么你会看到一个只在数据库中使用的密钥和同一个表的不同密钥在应用程序中可见的一个常见原因。

答案 1 :(得分:1)

我认为这可能取决于您正在使用的应用程序类型。我使用的Enterprise软件仅供我工作的公司使用,一般不为外界所用。在这种情况下,让用户看到与人员相关的记录的代理键通常是至关重要的,因为人员表中的信息没有唯一性。可能有两个John Smiths(我们实际上有超过1000个)是真正不同的人。他们甚至可能拥有相同的商业地址并且是不同的人(儿子通常以父亲的名字命名并且在同一个医疗实践中工作)。因此,他们需要在表单和报告中引用代理键,以确保他们使用他们认为他们想要的记录。另外,如果他们想要在报告中研究关于约翰史密斯的更多细节,那么他们如何在应用中查找它而不必通过所有1000找到正确的?创建一个假的id以及真实的id将是耗时的(我们一次导入数百万条记录)并且没有真正的好处,因为在我们的comapny应用程序之外数据不可见。

对于向公众开放的网络应用,我可以看到您可能不希望显示此信息的位置。