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>
后续问题是:如果您公开主键,那么人们如何在数据库环境中有效地限制对该资源的访问?将所有者分配给数据库行?
对设计回应感兴趣。
进一步阅读的潜在相关职位:
答案 0 :(得分:2)
将内部ID暴露给外部并不是一个好主意。您应该对它们进行编码(使用某种算法)或者使用查找表。
另外,不要将用户(或URL)提供的参数附加到SQL查询(UUIDS或不是UUIDS),这很容易引入SQL。为此使用参数化SQL查询。