我尝试在MarkLogic中创建具有给定数据库权限的用户。我从MarkLogic文档页面读取了Security Guide,发现您可以对给定的URI,集合或函数设置权限。
对集合的权限可以帮助我将来自数据库的给定集合标记为仅对给定的用户集可读,但是其他用户仍然可以创建和修改不同集合中的文档(或创建没有集合的文档)。
例如
我有两个数据库:
两个用户:
如何设置UserTest
在数据库Test
上具有读取/更新/插入/执行权限的权限,并且无法修改或读取任何数据库Test2
?
答案 0 :(得分:1)
每个数据库都可以与专用安全数据库相关联。您描述用例的方式(“UserTest将在数据库测试中读取/更新/插入/执行权限,无法修改或读取任何数据库Test2”),您可能需要考虑Test和Test2数据库的专用安全数据库
另一种方法是对两个数据库的角色使用不同的文档权限。您可以在插入时为文档级别设置读取/更新/插入/执行权限,或者使用xdmp更改它们:document-add-permissions()(保留以前的权限)或xdmp:document-set-permissions()插入后(覆盖以前的权限)。例如,您可以使用Test-Reader进行数据库测试,使用角色Test2-Reader进行数据库Test2,并确保(1)您的UserTest用户具有Test-Reader角色(但不具有Test2-Reader角色),以及(2)插入Test数据库的所有文档都将读取功能与Test-Reader角色(但不是Test2-Reader角色)等配对(其他功能相同)。
如果明确地控制它听起来像很多工作,请注意,可以声明默认文档权限在用户和角色级别隐式应用。
最后,如果在文档插入期间根本没有设置权限(如果在用户或角色级别没有定义隐式/默认权限),则只有具有admin角色的用户才能读取/更新/插入/执行。
以下是了解和使用安全指南中文档权限的相关部分:https://docs.marklogic.com/guide/security/permissions#id_85471
答案 1 :(得分:0)
数据库没有用户级规范。但请记住,数据库本身不可访问 - 可以通过链接到特定数据库的应用程序访问它。除非您允许人们运行eval并允许他们对另一个数据库进行评估,否则您的应用程序将使人员保持在指定的数据库中。 (注意:ML8高级HTTP服务器对此进行了一些更改,因为您可以根据请求动态切换数据库 - 但是关于被卡在单个数据库中的规则仍然存在。)
我认为对您有用的唯一其他项目是能够定义用户可以写入哪些URI前缀,但这并不能否定应用程序级别决定访问哪个DB的事实。