我正在寻找一种模式来为存储在CosmosDB中的结构化JSON文档建立安全性。一组用户组或单个用户可以访问一个文档,每个用户组每个文档都具有特定角色。该角色已映射到CRUD权限。我需要根据查询文档的权限过滤掉文档,并且正在考虑在文档中使用数组存储权限信息。
我的关注如下:
答案 0 :(得分:0)
删除权限的性能。有什么影响 更新数万个文档?
根据您的描述,您需要经常更改文档的权限。但是,据我所知,到目前为止,cosmos db sql api不支持部分更新。(请参考我以前的案例:How do you update sub-document in cosmos db更新,因此因此,您需要在每次操作时都操作整个文档。这对您来说是一项昂贵的工作。
据我所知,我建议您使用关系数据库。将权限存储在特定的表中,并将其用作文档的外键。也许这更适合您。
答案 1 :(得分:0)
我来自CosmosDB工程团队。没有足够的细节来提供准确的答案,但请随时跟进。
替换量要比创建的重,尽管这在当今的RU中可能还没有体现出来。
在分区键的边界内支持事务。请参见https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-write-stored-procedures-triggers-udfs#transactions,以了解有关使用存储过程实现交易的更多详细信息。
可使用哪些模式来避免丢失删除权限?
取决于是否期望对同一文档进行并发权限更新,权限的(重新)应用是幂等的。假设没有并发,并且x和x'是当前和新的权限集,则在发布更新失败的情况下,对所有文档重新应用(重新替换)x'应该不会起作用。
关于管理每个文档的权限集,我也有一个建议-您不是考虑将多个文档上的相同权限集复制,而是考虑将权限集分组到权限“组”中,为实际权限添加另一层间接寻址吗?您可以为每个“权限组”维护单独的文档,其中包含一组实际的用户组和/或属于权限的用户。希望这可以减少您对主要文档本身所做的更新,并且在许多情况下,您可以避免仅使用具有权限组详细信息的文档进行更新。