基于 MarkLogic 权限的角色创建

Role creation based on MarkLogic permissions

马克逻辑 9.0.8.2

我们开发了API在MarkLogic中获取和设置数据,所有数据都以xml格式存储在MarkLogic

现在我们想通过以下操作向外部用户公开此 API 端点

所以我们想根据权限创建不同的用户凭据,如 ReadOnly、ExecuteOnly。

我们需要哪些所有角色和权限 select 以确保他们可以执行他们被允许执行的操作?

预先注意:权限与文档访问有关,特权与功能访问有关。具体执行权限仅适用于模块访问,不适用于文档访问。

组织安全的方法有很多种,但基础知识通常非常相似。我将为您提供一个模式,我个人认为这是一个很好的做法,并且可能被证明是进一步扩展的一个很好的一般起点。

从 4 个本身没有属性的角色开始。在名称中输入 'read'、'insert'、'update' 和 'node-update'。

创建第五个名称为 'defaults' 的角色,并为其赋予上述四个角色的默认权限,其中能力与角色名称匹配(因此 'read' 用于读取角色等).

然后为 reader、编写者和维护者等抽象概念创建更高级别的角色。 Reader只继承read角色,writer继承reader、insert、update和defaults。维护者继承作者。删除是一种特殊的更新,并且不可区分。节点更新是更新的子集。我还没有遇到过我想允许节点更新但不允许完整更新的用例。

执行权限在这里没有意义,因为它只适用于模块,不适用于文档。执行权限用于允许使用特定功能(如 sem:sparql、xdmp:http-get 等)。将它们适当地应用于 reader 和作家角色。

避免对上述任何角色应用更危险的执行权限,如 xdmp:spawn 和 xdmp:eval。如果您遇到这种需求,请创建一个用于 Amps 的角色(您可以在名称中的某处放置 'amps'),并确保您仅将该角色用于 Amps,并且永远不要将其分配给角色或用户。

最后但同样重要的是,您通常在同一个数据库中有多个不同的数据集,并且您可能希望独立控制对它们的文档访问。在这种情况下,考虑研究 Compartment Security 而不是为每个数据集创建一组不同的角色。

HTH!