如何公开URL友好的UUID?

时间:2017-11-03 20:13:47

标签: rest database-design

Hello Internet Denizens,

我正在阅读一篇不错的database design article,关于如何正确生成数据库主键的最终决定是......

  

所以,实际上,正确的解决方案可能是:使用UUID作为密钥,   并且不要暴露他们。外部/内部可能是   最好留给友好的网址治疗,然后(作为中等   最后加上哈希值。

也就是说,将UUID用于内部目的(如db连接),但使用friendly-url用于外部目的(如REST API)。

我的问题是......你如何为外部目的制作唯一可识别(和友好)的密钥?

我使用了几种API:Stripe,QuickBooks,亚马逊等等,似乎他们使用直接序列ID来查找客户,报告ID等信息来检索信息。这让我想知道将UUID暴露为安全风险是否有点过分b / c理论上你应该能够在你的查询中添加where子句。

SELECT * FROM products where UUID = <supplied uuid> AND owner/role/group/etc = <logged in user>

后续问题是:如果您公开主键,那么人们如何在数据库环境中有效地限制对该资源的访问?将所有者分配给数据库行?

对设计回应感兴趣。

进一步阅读的潜在相关职位:

Should I use UUIDs for resources in my public API?

1 个答案:

答案 0 :(得分:2)

将内部ID暴露给外部并不是一个好主意。您应该对它们进行编码(使用某种算法)或者使用查找表。

另外,不要将用户(或URL)提供的参数附加到SQL查询(UUIDS或不是UUIDS),这很容易引入SQL。为此使用参数化SQL查询。