我正在尝试从任务中执行雪花笔记本。但是,作为任务所有者(因此用于运行任务)的用户(角色“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 确实拥有数据库的使用权限。
不知道在这里做什么。非常感谢任何提示!
不建议使用
ACCOUNTADMIN
创建和拥有对象。更多信息请参见:避免使用 ACCOUNTADMIN 角色创建对象
可以使用所需的角色导出和重新创建笔记本。例如:
PROD_ALL_RW_AR
可以是任务和笔记本的所有者。
授予所有权应该是可能的。 访问控制要求:
访问控制要求
使用或所有权
笔记本
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();
$$