保护 Oracle REST-Data-Services 中以 */private 结尾的每个端点

Secure every endpoint ending with */private in Oracle REST-Data-Services

我正在使用 Oracle Rest-Data-Services 将多个 PL/SQL-APIs 导出为使用 REST 的 Web 服务。因此,每个 PL/SQL-Package 都是一个 ORDS 模块,并且应该有一个以 */private 结尾的模板,必须对其进行保护,以便只有管理员用户可以调用它。

我尝试创建以下权限。

DECLARE
  l_roles_arr    OWA.vc_arr;
  l_patterns_arr OWA.vc_arr;
  l_modules_arr  OWA.vc_arr;
BEGIN
  ORDS.create_role(p_role_name => 'private_role');
  l_roles_arr(1)    := 'private_role';
  l_patterns_arr(1) := '*/private';
  --  select name bulk collect into l_modules_arr from user_ords_modules;
  ORDS.define_privilege (
    p_privilege_name => 'private_priv',
    p_roles          => l_roles_arr,
    p_patterns       => l_patterns_arr,
    --p_modules        => l_modules_arr,
    p_label          => 'private',
    p_description    => 'private');
  COMMIT;
END;

这没有任何效果,并且对 */private 的未授权调用仍然是可能的。当我取消对注释行的注释时,所有对其他端点的调用都必须经过授权。

是否可以定义这样的特权模式?

我在 api 文档中找到了答案。

https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/21.3/ordjv/doc-files/route-patterns.html

Glob Parameter
A Glob Parameter is denoted by the wildcard Modifier (the ‘*’ character). The wildcard Modifier MUST appear at the end of the pattern and MUST be preceded by the path separator. Only a single Glob Parameter is permitted in a pattern. A Glob Parameter MUST NOT occur in the same pattern as a Named Parameter.

不幸的是,通配符 * 必须位于模式的末尾。