我已经阅读了一些关于这个主题的文章,只是希望得到一些关于使用随机主键而不是自动增量的澄清。我正在构建一个应用程序而不是使用自动增量主键,我使用以下代码生成包含数字和字母的随机主键:
$bytes = random_bytes(8);
$bytes = bin2hex($bytes);
我想使用随机主键的原因是为了防止url被篡改。我的应用程序也具有记录级安全性,但我希望随机主键作为次要措施。此外,我将此列设置为唯一,以防止任何罕见的冲突。如果发生冲突我只是在屏幕上出现错误,要求使用重新提交生成另一个随机密钥的表单。所以我的问题如下:
谢谢。同样,我知道还有其他文章,但其中许多已经过时(在php 7随机字节之前)所以我认为id能够重新考虑随机主键是否被认为是最佳实践(为什么或为什么不是)。感谢。
答案 0 :(得分:1)
糟糕 - 非常糟糕,事实上。 Random primary keys play havoc with MySQL's page cache,这会使性能在负载下变差。这也意味着您将无法使用某些SQL功能,例如多行INSERT。
如果您想保护URL中的ID不被篡改,请考虑在URL中包含标识符的键控哈希值(例如,HMAC)。