Security 对不同于使用XQuery的数据库的查询

Security 对不同于使用XQuery的数据库的查询,security,xquery,marklogic,user-roles,security-roles,Security,Xquery,Marklogic,User Roles,Security Roles,目前,我正在开发一个应用程序,该应用程序对给定的MarkLogic数据库进行查询,我们可以说是默认数据库,但要在屏幕上提供相同的值,我必须在显示之前检查登录用户的角色。这可以通过查询安全数据库(MarkLogic本身提供的数据库)来完成,但我不知道如何在查询中明确声明我要查询的是该特定数据库而不是默认数据库。你知道什么命令可以帮我吗?谢谢大家! 您可以使用eval查询另一个数据库: xdmp:eval("doc('/docs/mydoc.xml')", (), <options xm

目前,我正在开发一个应用程序,该应用程序对给定的MarkLogic数据库进行查询,我们可以说是默认数据库,但要在屏幕上提供相同的值,我必须在显示之前检查登录用户的角色。这可以通过查询安全数据库(MarkLogic本身提供的数据库)来完成,但我不知道如何在查询中明确声明我要查询的是该特定数据库而不是默认数据库。你知道什么命令可以帮我吗?谢谢大家!

您可以使用eval查询另一个数据库:

xdmp:eval("doc('/docs/mydoc.xml')",  (),
  <options xmlns="xdmp:eval">
    <database>{xdmp:database("otherdb")}</database>
  </options>)
xdmp:eval(“doc('/docs/mydoc.xml'),(),
{xdmp:database(“otherdb”)}
)
见:


另外,如果您专门查询安全数据库,则可以使用而不是
xdmp:database

请记住,如果您需要访问安全数据库中的文档,则该使用将需要安全角色,否则安全数据库将显示为空(由于对所有安全资产的文档权限)。向用户分发该角色时要小心。相反,考虑在高度受限的函数中打包访问安全数据库,以获得安全角色,而不是将角色转交给最终用户。@ GRTJN良好建议。另一个想法是围绕具有各种基于角色的权限的文档设计一个查询,这样OP希望基于角色有条件地显示的值将仅仅是查询的结果,从而避免完全查询安全数据库。你们都提出了有关安全访问的有趣观点。我需要的查询仅用于确定当前用户是否可以看到我正在显示的控制台的某些部分,但我想知道它是否可以用于在服务器上进行某种攻击。@chiaridinardo这取决于它的实现方式。如果您从未对从客户端传递的字符串进行求值,那么这可能没问题。正如grtjn所建议的,使用amp更安全。事实上,我所做的查询只是根据用户角色显示网站的某些部分,而不是其他部分,但是所有关于他的信息都是通过查询安全数据库直接获取的,从其登录凭据开始,所以这应该不是一个大问题,但作为一个重要的数据库,我希望尽可能多地限制它的访问。