0

我正在使用 Oracle Rest-Data-Services 将多个 PL/SQL-API 导出为使用 REST 的 Web 服务。因此,每个 PL/SQL 包都是一个 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仍然可以进行未经授权的调用。当我取消注释注释行时,甚至对其他端点的所有调用都必须得到授权。

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

4

1 回答 1

0

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

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

Glob 参数
Glob 参数由通配符修饰符(“*”字符)表示。通配符修饰符必须出现在模式的末尾,并且必须在路径分隔符之前。模式中只允许使用单个 Glob 参数。Glob 参数不能以与命名参数相同的模式出现。

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

于 2021-11-17T07:36:32.460 回答