【发布时间】:2019-11-26 19:58:10
【问题描述】:
我一直处于这种两难境地,找不到任何提示,尽管似乎有人已经这样做了。
我需要用加密安全(即非连续!)ID 替换顺序 AUTO_INCREMENT(或等效)主键,但同时我想保持顺序 PK 的性能优势:保证未使用的下一个 ID,集群性等。
一种简单的方法似乎是实现一个加密伪随机排列生成器,以将 2^N 空间唯一地映射到 2^N,而不会发生冲突并具有初始化向量 (IV)。
虽然这可以在外部实现,但这确实需要存储和原子访问状态(排列位置或最后一个 id),这意味着在外部实现将非常低效(相当于为每个 @ 运行后续 UPDATE table SET crypto_id = FN_CRYPTO(autoincrement_id) WHERE autoincrement_id=LAST_INSERT_ID() 987654323@)。
您知道在商业用途的数据库中上述任何此类实现吗?
【问题讨论】:
-
为什么不使用 uniqueidentifier?这还不够安全吗?请参阅下面链接中的示例 B:
-
@DaFi4 谢谢你,我不知道它存在;然而,似乎有一些怪癖:1)它是一个长的字母数字香肠,比数字 ID PK 处理起来要慢得多。 2) 阅读 RFC 4122,UUIDS 有 2 种实现:一种是随机的(会产生冲突),另一种是时间戳,以 0.1us 为增量,清晰(没有散列或任何东西)。所以不够安全被低估了……根本不安全。它使 id 在足够近的距离处保持递增顺序。此外,MS doc 没有说明它是哪种算法。 3) 这是否扩展到分布式数据库?
-
4) 如何获取最后插入的ID?
-
1.它并不是真的很慢,它的设计速度很快 2. 它的设计使碰撞不会发生。我在 22 年中从未见过一个。 3. 是的,事实上,使用这种方法的一个主要功能是解决分布式数据库和数据产生的问题
标签: sql database cryptography