在Snowflake中执行Notebook所需的权限

问题描述 投票:0回答:1

我正在尝试从任务中执行雪花笔记本。但是,作为任务所有者(因此用于运行任务)的用户(角色“PROD_ALL_RW_AR”)无权访问由 ACCOUNTADMIN 创建并拥有的笔记本。

关于笔记本的文档说,执行笔记本需要使用或拥有笔记本。

我已尝试以下方法来授予使用权:

GRANT USAGE ON ALL NOTEBOOKS TO ROLE PROD_ALL_RW_AR; -- Unsupported feature 'ALL'.

GRANT USAGE ON NOTEBOOK BI_ELT.INTEGRATIONS.PRE_ADRECORD_PATCH TO ROLE PROD_ALL_RW_AR; --SQL compilation error: Notebook does not support this feature.

我也尝试过改变所有权:

GRANT OWNERSHIP ON ALL NOTEBOOKS IN DATABASE BI_ELT TO ROLE PROD_ALL_RW_AR; -- Unsupported feature 'GRANT on all objects of type NOTEBOOK'.

GRANT OWNERSHIP ON NOTEBOOK BI_ELT.INTEGRATIONS.PRE_ADRECORD_PATCH TO ROLE PROD_ALL_RW_AR;  -- SQL compilation error: Notebook does not support this feature.

这些都不起作用。

角色 PROD_ALL_RW_AR 确实拥有数据库的使用权限。

不知道在这里做什么。非常感谢任何提示!

snowflake-cloud-data-platform
1个回答
0
投票
  1. 不建议使用

    ACCOUNTADMIN
    创建和拥有对象。更多信息请参见:避免使用 ACCOUNTADMIN 角色创建对象

  2. 可以使用所需的角色导出和重新创建笔记本。例如:

    PROD_ALL_RW_AR
    可以是任务和笔记本的所有者。

  3. 根据文档,
  4. 授予所有权应该是可能的。 访问控制要求

访问控制要求

使用或所有权

笔记本

OWNERSHIP 是对象上的特殊权限,自动授予创建该对象的角色,但也可以由拥有角色(或任何具有 MANAGE GRANTS 权限的角色)使用 GRANT OWNERSHIP 命令将其转移给其他角色。

虽然看起来不支持(?):

SELECT CURRENT_VERSION();
-- 8.47.1

GRANT OWNERSHIP ON NOTEBOOK <DB>.<schema>.<notebook> TO ROLE <role>;
-- Notebook does not support this feature.

解决方法(如果由于某种原因无法在笔记本级别直接授予使用/所有权)是使用定义为 EXECUTE AS OWNER 的存储过程来包装笔记本执行。下面的伪代码(未经测试!):

-- Role_X is owner of Notebook_A

-- Role_X is owner of stored procedure
CREATE PROCEDURE notebook_A_launcher()
...
EXECUTE AS OWNER
AS
$$
   EXECUTE NOTEBOOK db.schema.notebook_a();
$$;

-- Grant usage of SP to role that owns task
GRANT USAGE ON STORED PROCEDURE ... TO ROLE Role_Y;

-- Role_Y is owner of task
CREATE OR ALTER TASK task_name
WAREHOUSE = my_warehouse
SCHEDULE = '60 minute'
AS
$$
  CALL db.schema.notebook_A_launcher();
$$
© www.soinside.com 2019 - 2024. All rights reserved.