如何从MarkLogic安全数据库获取全部角色(含Compartment角色)
获取MarkLogic安全数据库中所有角色(含Compartment角色)的方法
你当前使用的xdmp:get-current-roles()仅能返回当前用户已被赋予的角色ID,因此无法获取系统内所有角色,包括Compartment类型的角色。要实现获取安全数据库全部角色的需求,可采用以下两种方法:
方法1:直接查询安全数据库的角色文档
MarkLogic所有角色(含Compartment角色)都存储在默认名为Security的安全数据库中,且归属于http://marklogic.com/xdmp/roles集合。切换至安全数据库执行以下查询即可:
xquery version "1.0-ml"; import module namespace sec = "http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy"; for $role-doc in collection("http://marklogic.com/xdmp/roles") let $role-name := sec:role-get-name($role-doc) let $role-type := sec:role-get-type($role-doc) return ( "角色名称: " || $role-name, "角色类型: " || $role-type, "---" )
该查询会遍历所有角色文档,通过安全模块函数提取角色名称与类型,明确区分普通角色和Compartment角色。
方法2:使用admin模块枚举所有角色ID
若你拥有管理员权限,可借助admin模块的admin:role-get-all-ids()函数获取全部角色ID,再转换为角色名称:
xquery version "1.0-ml"; import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy"; let $all-role-ids := admin:role-get-all-ids(admin:get-configuration()) for $id in $all-role-ids return xdmp:role-name($id)
注意事项
- 执行上述查询需要足够权限:至少需具备安全数据库的读取权限,或拥有管理员/安全管理员角色。
- Compartment角色属于细粒度权限控制组件,需确保当前账号有权限访问这类角色的元数据。
内容的提问来源于stack exchange,提问作者Dharmendra Kumar Singh
相关产品推荐
相关产品推荐

