Oracle ORDS如何为所有以*/private结尾的端点配置访问控制权限
ORDS路径权限通配符配置问题解答
ORDS完全支持通配符模式定义权限规则,你配置不生效是通配符写法和参数使用错误导致的。
问题原因
- 通配符格式错误:ORDS的路径匹配规则要求所有权限模式必须以
/开头,且匹配多层路径需要用**通配符,你写的*/private不符合规则,系统无法识别匹配,所以权限规则没有生效。 p_modules参数不要赋值:该参数的作用是将指定模块下的所有端点都绑定到当前权限,不管路径规则是什么,所以你取消注释后整个模块的所有接口都需要鉴权,和你定义的路径规则无关。
修正后的配置代码
DECLARE l_roles_arr OWA.vc_arr; l_patterns_arr OWA.vc_arr; BEGIN -- 角色不存在则创建,已存在的话可以跳过这句避免报错 ORDS.create_role(p_role_name => 'private_role'); l_roles_arr(1) := 'private_role'; -- 正确的通配符写法:**匹配任意多层路径前缀,规则以/开头 l_patterns_arr(1) := '/**/private'; ORDS.define_privilege ( p_privilege_name => 'private_priv', p_roles => l_roles_arr, p_patterns => l_patterns_arr, p_label => 'private', p_description => 'private endpoint access control'); -- 刷新ORDS元数据缓存,让配置即时生效 ORDS.REST_METADATA_CACHE_REFRESH(); COMMIT; END; /
补充说明
- 如果需要更精确的匹配,比如仅匹配模块下二级路径为private的,可以写
/*/private,其中*只匹配单个路径段 - 配置完成后可以通过查询
USER_ORDS_PRIVILEGE_MAPPINGS视图确认权限规则是否正确录入
内容的提问来源于stack exchange,提问作者donvogel
相关产品推荐
相关产品推荐

