使用数据库表的ID作为外部API标识符是一个坏主意吗?

Sua*_*uan 5 database-design api-design primary-key uniqueidentifier

我们正在设计一个带有外部API的HTTP服务,它需要存储一些外部API消费者可能需要稍后检索的项目.所有内容都存储在一个表中foos,当前计划只是使用表的主ID键作为外部唯一标识符.我的直觉告诉我这是一个糟糕的设计,但我无法有效地论证我的情况,部分原因是因为我无法明确说明原因.

以下是迄今为止我能想到的唯一缺点:

  • 如果我们想要更改架构怎么办?我们必须重新填充所有内容,确保其ID保持不变,或在移动过程中实现另一个唯一标识符列
  • 轻微(?)安全风险(我知道,通过默默无闻的安全性等等)

还有其他主要缺点,还是我只是偏执狂?也会欣赏一些链接到发表的文章,谈论这个!

Dan*_*nze 5

我会继续说,如果您的数据库被锁定,这比无关紧要,除非:

  • 共享API密钥意味着用户信息的CIA丢失.
  • 您可以轻松地在没有二级身份验证的情况下调用API.

我敢肯定,你已经知道的是,采取措施防止SQL注入将阻止任何人利用这一信息优势,但是知道索引范围可能意味着有人会知道,少1或1以上的索引范围是有形的关键用于访问您的API.


例如:

如果您可以在不登录的情况下通过URL访问API,那么使用索引范围是不好的.
http://mysite.com?APIkey=145
如果我知道我的密钥是145,那么144146可能也可以拨打电话.

使用GUID方案是解决这个问题的方法,但是你正在做出其他牺牲:
ID(索引): 145
ID(GUID): C87FC84A-EE47-47EE-842C-29E969AC5131


或者最后,您可以添加另一列以将随机哈希保存为您所说的唯一API密钥:
ID(哈希): da39a3ee5e6b4b0d3255bfef95601890afd80709