You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从information_schema.TASK_HISTORY查询多用户任务历史及权限配置

问题描述

我尝试通过information_schema.TASK_HISTORY监控Snowflake任务,现有以下场景:

  • 任务TASK_A由USER_A使用角色ROLE_A创建
  • 任务TASK_B由USER_B使用角色ROLE_B创建
  • 两个任务位于同一共享数据库和Schema中

当以USER_A身份查询时,仅能查看TASK_A的历史记录。请问:

  1. 如何实现单用户查询两个任务的合并历史记录?
  2. 需要授予何种权限才能达成此需求?
  3. 尝试将TASK_B的所有权授予ROLE_A时,出现错误:grantee need to be a subordinate role of the schema owner,该如何解决?
解决方案

一、无需转移所有权:通过授权实现跨任务历史查询

Snowflake的information_schema.TASK_HISTORY默认仅返回当前角色有权限监控的任务记录,因此只需给ROLE_A授予TASK_B的MONITOR权限即可实现合并查询,这是最轻量化的方案。

具体操作步骤

  1. 切换到拥有TASK_B所有权的角色(如ROLE_B):
USE ROLE ROLE_B;
  1. 授予ROLE_A对TASK_B的MONITOR权限:
GRANT MONITOR ON TASK TASK_B TO ROLE ROLE_A;
  1. 验证:以USER_A身份登录,使用ROLE_A执行查询,即可同时获取TASK_A和TASK_B的历史记录:
USE ROLE ROLE_A;
SELECT * FROM INFORMATION_SCHEMA.TASK_HISTORY WHERE NAME IN ('TASK_A', 'TASK_B');

二、解决所有权转移的错误(若需转移任务归属)

错误grantee need to be a subordinate role of the schema owner的核心原因是:目标角色ROLE_A并非任务所在Schema的所有者角色的下属角色。Snowflake要求,转移对象所有权时,被授予者必须是对象所在容器(Schema)所有者的下属角色,或Schema所有者本身。

具体解决步骤

  1. 先确认任务所在Schema的所有者角色:
SELECT OWNER 
FROM INFORMATION_SCHEMA.SCHEMATA 
WHERE SCHEMA_NAME = '<你的Schema名称>' 
  AND CATALOG_NAME = '<你的数据库名称>';

假设查询结果为SCHEMA_OWNER_ROLE。

  1. 选择以下两种方式之一完成所有权转移:

方式1:由Schema所有者直接转移所有权

USE ROLE SCHEMA_OWNER_ROLE;
-- COPY CURRENT GRANTS 参数可保留TASK_B原有的权限配置
GRANT OWNERSHIP ON TASK TASK_B TO ROLE ROLE_A COPY CURRENT GRANTS;

方式2:将ROLE_A设为Schema所有者的下属角色后转移

-- 先让Schema所有者将ROLE_A设为自己的下属
USE ROLE SCHEMA_OWNER_ROLE;
GRANT ROLE ROLE_A TO ROLE SCHEMA_OWNER_ROLE;

-- 再用TASK_B的原所有者角色完成转移
USE ROLE ROLE_B;
GRANT OWNERSHIP ON TASK TASK_B TO ROLE ROLE_A COPY CURRENT GRANTS;

注意事项

  • 转移所有权会改变任务的管理归属,仅在需要让ROLE_A完全掌控TASK_B时使用,否则优先选择授予MONITOR权限的方案。
  • COPY CURRENT GRANTS参数可避免转移后丢失TASK_B原有的权限设置,建议始终添加。

内容的提问来源于stack exchange,提问作者gokul goku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:35:29