创建仅对给定数据库具有权限的用户
Create user that has permission only to given database
我正在尝试在 MarkLogic 中创建对给定数据库具有权限的用户。我从 MarkLogic 文档页面阅读 Security Guide,发现您可以对给定的 URI、集合或函数设置权限。
集合权限可以帮助我将数据库中的给定集合标记为仅对给定用户集可读,但其他用户仍然可以在不同集合中创建和修改文档(或创建没有集合的文档)。
例如
我有两个数据库:
- 测试
- 测试2
还有两个用户:
- 用户测试
- UserTest2
如何设置 UserTest
对数据库 Test
具有 read/update/insert/execute 权限并且不能修改或读取任何数据库 Test2
的权限?
数据库没有用户级规范。但请记住,数据库本身无法访问 - 它可以通过链接到特定数据库的应用程序访问。除非您允许人们 运行 评估并允许他们针对另一个数据库进行评估,否则您的应用程序会将人员保留在指定的数据库中。 (注意:ML8 Advanced HTTP 服务器稍微改变了这一点,因为您可以根据请求即时切换数据库——但关于坚持使用单个数据库的规则仍然有效)。
我认为对您有用的唯一一项是定义用户可以写入哪些 URI 前缀的能力,但这并不能否定应用程序级别决定访问哪个数据库的事实。
每个数据库都可以与一个专用的安全数据库相关联。根据您描述用例的方式 ("UserTest will have permissions read/update/insert/execute on database Test and can't modify or read anything database Test2"),您可能需要考虑为 Test 和 Test2 数据库使用专用的安全数据库。
另一种方法是对两个数据库的角色使用不同的 document 权限。您可以在插入时为给定角色在文档级别设置 read/update/insert/execute 权限,或者使用 xdmp:document-add-permissions() (保留以前的权限)或 xdmp:document-set-permissions 更改它们() (覆盖以前的权限)插入后。例如,您可以为数据库 Test 设置一个角色 Test-Reader,为数据库 Test2 设置一个角色 Test2-Reader,并确保 (1) 您的 UserTest 用户具有 Test-Reader角色(但不是 Test2-Reader 角色),以及 (2) 插入测试数据库的所有文档都将读取能力与 Test-Reader 角色(但不是 Test2-Reader 角色)等(其他功能相同。)
如果显式控制这听起来像很多工作,请注意可以声明默认文档权限以在用户和角色级别隐式应用。
最后,如果您在文档插入期间根本没有设置任何权限(并且如果没有在用户或角色级别定义 implicit/default 权限),则只有具有管理员角色的用户才能 read/update/insert/execute。
这是了解和使用安全指南中文档权限的相关部分:https://docs.marklogic.com/guide/security/permissions#id_85471
我正在尝试在 MarkLogic 中创建对给定数据库具有权限的用户。我从 MarkLogic 文档页面阅读 Security Guide,发现您可以对给定的 URI、集合或函数设置权限。
集合权限可以帮助我将数据库中的给定集合标记为仅对给定用户集可读,但其他用户仍然可以在不同集合中创建和修改文档(或创建没有集合的文档)。
例如
我有两个数据库:
- 测试
- 测试2
还有两个用户:
- 用户测试
- UserTest2
如何设置 UserTest
对数据库 Test
具有 read/update/insert/execute 权限并且不能修改或读取任何数据库 Test2
的权限?
数据库没有用户级规范。但请记住,数据库本身无法访问 - 它可以通过链接到特定数据库的应用程序访问。除非您允许人们 运行 评估并允许他们针对另一个数据库进行评估,否则您的应用程序会将人员保留在指定的数据库中。 (注意:ML8 Advanced HTTP 服务器稍微改变了这一点,因为您可以根据请求即时切换数据库——但关于坚持使用单个数据库的规则仍然有效)。
我认为对您有用的唯一一项是定义用户可以写入哪些 URI 前缀的能力,但这并不能否定应用程序级别决定访问哪个数据库的事实。
每个数据库都可以与一个专用的安全数据库相关联。根据您描述用例的方式 ("UserTest will have permissions read/update/insert/execute on database Test and can't modify or read anything database Test2"),您可能需要考虑为 Test 和 Test2 数据库使用专用的安全数据库。
另一种方法是对两个数据库的角色使用不同的 document 权限。您可以在插入时为给定角色在文档级别设置 read/update/insert/execute 权限,或者使用 xdmp:document-add-permissions() (保留以前的权限)或 xdmp:document-set-permissions 更改它们() (覆盖以前的权限)插入后。例如,您可以为数据库 Test 设置一个角色 Test-Reader,为数据库 Test2 设置一个角色 Test2-Reader,并确保 (1) 您的 UserTest 用户具有 Test-Reader角色(但不是 Test2-Reader 角色),以及 (2) 插入测试数据库的所有文档都将读取能力与 Test-Reader 角色(但不是 Test2-Reader 角色)等(其他功能相同。)
如果显式控制这听起来像很多工作,请注意可以声明默认文档权限以在用户和角色级别隐式应用。
最后,如果您在文档插入期间根本没有设置任何权限(并且如果没有在用户或角色级别定义 implicit/default 权限),则只有具有管理员角色的用户才能 read/update/insert/execute。
这是了解和使用安全指南中文档权限的相关部分:https://docs.marklogic.com/guide/security/permissions#id_85471