【问题标题】:Snowflake pipe - what permissions are needed for a different user to use the rest API /insertReport雪花管道 - 不同用户需要什么权限才能使用其余 API /insertReport
【发布时间】:2022-06-11 15:32:23
【问题描述】:

我有一个由用户 A 创建的 Snowpipe。然后我希望单独的用户 B 使用 Snowflake REST API 端点 /insertReport 检查其状态。

  • 用户 A 是ACCOUNTADMIN
  • 用户 A 创建了 Snowpipe。
  • 用户 A 为用户 B 的默认角色运行以下命令:
GRANT ALL ON PIPE <my pipe> TO ROLE USER_B_ROLE;
GRANT ALL ON FUTURE PIPES IN DATABASE <my db> TO ROLE USER_B_ROLE;
GRANT MONITOR ON DATABASE <my db> TO ROLE USER_B_ROLE;
GRANT USAGE ON DATABASE <my db> TO ROLE USER_B_ROLE;
GRANT MONITOR ON SCHEMA <my schema> TO ROLE USER_B_ROLE;
GRANT USAGE ON SCHEMA <my schema> TO ROLE USER_B_ROLE;
  • 我担任角色 USER_B_ROLE(我没有直接访问权限以用户 B 身份登录)并且可以运行以下命令并按预期查看输出:
USE ROLE USER_B_ROLE;
SELECT CURRENT_ROLE();
-- USER_B_ROLE

DESCRIBE PIPE <my pipe>;
-- created_on,name,database_name,schema_name,definition,owner,notification_channel,comment,integration,pattern,error_integration
-- 2022-01-..., ..., ...

SELECT SYSTEM$PIPE_STATUS('<my db>.<my schema>.<my pipe>');
-- {"executionState":"RUNNING","pendingFileCount":0,"notificationChannelName":"arn:aws:sqs:...","numOutstandingMessagesOnChannel":0,"lastReceivedMessageTimestamp":"..."}

当我尝试使用用户 B 时,使用 GET https://{account}.snowflakecomputing.com/v1/data/pipes/{snowpipe}/insertReport 我收到:{'data': None, 'code': '390403', 'message': 'Not authorized to manage the specified object. Pipe access permission denied', 'success': False, 'headers': None}

我已经检查了公钥 fp 和私钥是否有效,因为我可以获得正确的 JWT 令牌。

我认为我不能将管道和所有未来此类管道的所有权作为一揽子声明转让给用户 B,因为 Terraform 部署,即使是那些没有更改的部署,也会重新创建 PIPE 并删除用户 B 的所有权限 -这就是为什么我想使用FUTURE。

我也尝试过GRANT MONITOR EXECUTION,但这也不起作用。

我缺少什么权限?


相关文档:

【问题讨论】:

  • 我看到了所有的 priv,但看不到用户 B 对表的权限?你添加了吗?
  • 您能否使用 USER_B_ROLE 从 Snowflake UI 运行 SELECT SYSTEM$PIPE_STATUS?如果可行,那么它也应该通过 REST API 以编程方式运行。
  • @Sergiu 是的,我可以看到使用 USER_B_ROLE 从 Snowflake UI 运行 SELECT SYSTEM$PIPE_STATUS() 并查看结果,但是在尝试其余 api 时在我的帖子中得到 403
  • @Anand 啊哎呀,我忘了在帖子中明确说明,但我已将MONITOR 和OPERATE 授予数据库+ USER_B_ROLE 的架构+ 以及FUTURE OPERATE+MONITOR对于数据库中的所有管道。我认为这也应该涵盖表的权限(?) - 我认为 Snowflake 中的权限和权限是相同的。
  • 我也有GRANT SELECT ON TABLE &lt;ingest table&gt; TO ROLE USER_B_ROLE和GRANT USAGE ON WAREHOUSE &lt;some wh&gt; TO ROLE USER_B_ROLE,可以运行select * from table(information_schema.copy_history(TABLE_NAME=&gt;'db.schema.ingest_table', START_TIME=&gt; DATEADD(hours, -1, CURRENT_TIMESTAMP())));查看结果

标签: snowflake-cloud-data-platform


【解决方案1】:

我已与 Snowflake 代表核实过 - 无论 MONITOR 和 OPERATE 特权如何,如果您想使用 /insertReport,您必须拥有管道的 OWNERSHIP。


这里https://docs.snowflake.com/en/release-notes/2021-03.html#snowpipe-support-for-non-pipe-owners-to-manage-pipes-preview 的权限和功能根本没有提到/insertReport。您可以让子角色启动/暂停/加载/读取/检查(通过 SQL)管道,但没有权限让非所有者使用 /insertReport。

【讨论】:

    【解决方案2】:

    如果角色具有MONITOR 权限,则可以由不是管道所有者的用户调用/insertReport。

    Snowpipe: Support for Non-Pipe Owners to Call the Snowpipe REST API:

    在此版本中,调用公共 Snowpipe REST 端点来加载数据和检索加载历史报告不再仅限于管道所有者(即在管道上具有 OWNERSHIP 权限的角色)或更高级别的角色角色层次结构。 以下管道权限允许调用特定的 REST 端点:

    Pipe Privilege REST Endpoints
    MONITOR insertReport, loadHistoryScan
    OPERATE insertFiles

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多