非任务所有者恢复任务时,是否以任务创建者的权限执行?
问题解答
绝大多数数据库原生调度任务的权限模型遵循以下规则:
- 任务执行时的权限上下文固定绑定任务所有者(USER1),和触发/恢复任务的用户身份无关
- 操作任务恢复的USER2仅需要任务管理类权限即可,不需要拥有任务内部逻辑涉及的任何业务权限:
- 以常见数据库为例,USER2只需要持有Oracle的
MANAGE SCHEDULER、SQL Server的ALTER ANY JOB、Snowflake的ALTER TASK这类对应任务操作权限,就能完成任务恢复动作
- 以常见数据库为例,USER2只需要持有Oracle的
- 任务内部调用存储过程(SP)、执行DML操作的所有权限校验,全部以USER1的身份完成:只要USER1有对应SP的执行权限、受影响对象的DML权限,任务恢复后就能正常运行,完全不需要USER2持有这些业务权限
特殊场景说明
如果你使用的存储过程显式设置为调用者权限模式(比如Oracle定义SP时加AUTHID CURRENT_USER参数、SQL Server指定EXECUTE AS CALLER),SP运行时会使用当前执行上下文的权限,但这个上下文依然是任务所有者USER1,和恢复任务的USER2无关,不会切换到USER2的权限。
内容的提问来源于stack exchange,提问作者Sayantan Mandal
相关产品推荐
相关产品推荐

