执行含PDPT_PTY.FUNC的DBMS_PARALLEL_EXECUTE脚本遇ORA-27486权限不足
ORA-27486权限缺失排查(DBMS_PARALLEL_EXECUTE调用自定义函数场景)
当使用DBMS_PARALLEL_EXECUTE.RUN_TASK时调用自定义函数PDPT_PTY.FUNC(col1)触发ORA-27486,直接使用字段col1却正常执行,说明问题出在自定义函数的权限传递或调度器权限上,以下是需要补充的权限项:
1. 自定义函数的执行权限
确保执行并行任务的用户(任务运行时的执行者,可能是当前用户或指定的调度用户)拥有PDPT_PTY.FUNC的执行权限:
GRANT EXECUTE ON PDPT_PTY.FUNC TO 任务执行用户;
如果是当前用户执行任务,先在当前会话中直接调用PDPT_PTY.FUNC(col1)验证是否能正常运行,排除基础权限问题。
2. Oracle Scheduler相关权限
DBMS_PARALLEL_EXECUTE底层依赖Oracle Scheduler执行并行任务,执行者需要调度器相关权限:
- 基础必要权限:
GRANT CREATE JOB TO 任务执行用户; - 若涉及复杂任务管理,可补充授予:
GRANT MANAGE SCHEDULER TO 任务执行用户;
注意:遵循最小权限原则,避免直接授予CREATE ANY JOB(除非业务场景必需)。
3. 自定义函数内部对象的权限(若函数访问其他对象)
如果PDPT_PTY.FUNC内部访问了其他表、视图或函数,需要确保:
- 函数所有者
PDPT_PTY对这些内部对象有相应的访问权限(如SELECT、EXECUTE); - 若函数使用
AUTHID CURRENT_USER定义,任务执行者需要对这些内部对象有直接权限;若使用默认的AUTHID DEFINER,则确保PDPT_PTY的权限足够覆盖函数内部所有操作。
验证步骤
查询调度器日志获取更详细的错误定位:
SELECT log_id, job_name, status, error#, additional_info FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE job_name LIKE '%你的并行任务名称%';
其中additional_info字段会明确指出缺失的具体权限项。
内容的提问来源于stack exchange,提问作者Ranjan
相关产品推荐
相关产品推荐

