为什么许多应用程序在向用户显示记录时用看似随机的替代 id 替换数据库的主键?
我的猜测是它可以防止用户猜测表中的其他行。如果是这样,那不就是一种虚假的安全感吗?
为什么许多应用程序在向用户显示记录时用看似随机的替代 id 替换数据库的主键?
我的猜测是它可以防止用户猜测表中的其他行。如果是这样,那不就是一种虚假的安全感吗?
我猜你在这里谈论代理键。代理键的期望或假定优势之一是它们不受任何外部含义或对数据库外部任何内容的依赖的负担。因此,例如可以安全地重新分配代理键值,或者可以重构或丢弃该键,而不会对系统用户造成任何后果。
通常,代理键对用户是隐藏的,因此他们不会获得任何此类外部依赖项。对用户隐藏实际上是 EFCodd 提出的代理键的原始定义的一部分。如果键值驻留在用户的浏览器缓存或收藏夹列表中,那么它们不再用作“代理”。这就是为什么您会看到一个只在数据库内部使用的键和在应用程序中可见的同一张表的不同键的一个常见原因。
我认为这可能取决于您正在使用的应用程序类型。我使用的企业软件仅由我工作的公司使用,并且通常不向外界提供。在这种情况下,让用户看到人员相关记录的代理键通常很关键,因为人员表中的信息没有唯一性。可能有两个真正不同的人(我们实际上有超过 1000 个)。他们甚至可能拥有相同的公司地址并且是不同的人(例如,儿子通常以父亲的名字命名并且在相同的医疗机构工作)。因此,他们需要参考表格和报告中的代理键,以确保他们使用的是他们认为想要的记录。否则,如果他们想研究他们在报告中看到的有关约翰·史密斯的更多细节,他们将如何在应用程序中查找它而不必通过所有 1000 个来找到正确的?创建一个伪造的 id 和真实的 id 会很耗时(我们一次导入数百万条记录)并且没有真正的收益,因为数据在我们的公司应用程序之外是不可见的。
对于向公众开放的网络应用程序,我可以看到您可能不想在哪里显示此信息。