如何在MarkLogic中配置细粒度权限以仅允许更新指定数据库配置
MarkLogic 指定数据库配置更新的细粒度权限配置指南
要实现仅允许用户更新指定数据库的配置,需通过移除过宽权限角色+创建细粒度自定义角色的方式实现,具体步骤如下:
1. 移除过宽的manage-admin角色
*manage-admin*角色拥有所有管理资源的操作权限,这是用户能修改其他数据库的核心原因,先将该角色从custom-rest-admin用户中移除:
curl --anyauth --user admin:admin-password -X PUT -H "Content-Type: application/json" -d '{ "role-name": ["rest-writer", "rest-admin"] }' "http://localhost:8002/manage/v2/users/custom-rest-admin/roles"
2. 创建针对目标数据库的自定义管理角色
创建一个仅能管理MY_DATABASE_NAME的自定义角色(例如*custom-db-admin-MY_DATABASE*):
curl --anyauth --user admin:admin-password -X POST -H "Content-Type: application/json" -d '{ "role-name": "custom-db-admin-MY_DATABASE", "description": "仅允许更新MY_DATABASE_NAME数据库配置的角色" }' "http://localhost:8002/manage/v2/roles"
3. 为自定义角色添加细粒度权限
给自定义角色添加*manage-update*权限,目标指定为MY_DATABASE_NAME的管理资源URI:
curl --anyauth --user admin:admin-password -X POST -H "Content-Type: application/json" -d '{ "privilege-name": "manage-update", "action": "http://marklogic.com/manage/actions/update", "resource": "http://marklogic.com/manage/v2/databases/MY_DATABASE_NAME" }' "http://localhost:8002/manage/v2/roles/custom-db-admin-MY_DATABASE/privileges"
说明:
*manage-update*是MarkLogic中用于修改管理资源的细粒度权限,通过指定resource为目标数据库的管理URI,限制权限仅作用于该数据库。
4. 将自定义角色分配给目标用户
把刚创建的自定义角色分配给custom-rest-admin用户:
curl --anyauth --user admin:admin-password -X PUT -H "Content-Type: application/json" -d '{ "role-name": ["rest-writer", "rest-admin", "custom-db-admin-MY_DATABASE"] }' "http://localhost:8002/manage/v2/users/custom-rest-admin/roles"
5. 验证权限效果
- 测试更新目标数据库(应成功):
curl --anyauth --user custom-rest-admin:pass -X PUT -d@"./database-config.json" -i -H "Content-type: application/json" "http://localhost:8002/manage/v2/databases/MY_DATABASE_NAME/properties"
- 测试更新其他数据库(应返回权限不足错误):
curl --anyauth --user custom-rest-admin:pass -X PUT -d@"./database-config.json" -i -H "Content-type: application/json" "http://localhost:8002/manage/v2/databases/OTHER_DATABASE_NAME/properties"
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

