Snowflake原生应用表访问权限授予失败的问题排查
问题解决方案
核心原因
警告的本质是应用的运行角色没有权限接收用户授予的表SELECT权限,而非你的ACCOUNTADMIN角色缺少权限(ACCOUNTADMIN默认就有MANAGE GRANTS,执行GRANT MANAGE GRANTS ON ACCOUNT TO ROLE ACCOUNTADMIN是冗余操作)。
1. 修正manifest.yml配置
需要在manifest中明确权限授予的目标角色,并确保应用运行角色有必要的基础权限:
references: - my_table: label: "My Table" description: "My table" privileges: - SELECT object_type: Table multi_valued: false register_callback: app_instance_schema.update_reference # 指定将表权限授予应用的运行角色(通常是APP_RUN_ROLE) grant_privileges_to: APP_RUN_ROLE # 全局配置:声明应用运行角色需要的基础权限 required_privileges: - PRIVILEGE: USAGE ON SCHEMA OBJECT_NAME: app_instance_schema TO_ROLE: APP_RUN_ROLE - PRIVILEGE: EXECUTE ON FUNCTION OBJECT_NAME: app_instance_schema.update_reference() TO_ROLE: APP_RUN_ROLE
2. 配置应用运行角色的权限
用ACCOUNTADMIN执行以下SQL,确保应用运行角色能接收外部表的权限:
-- 允许应用运行角色接收用户授予的外部对象权限 GRANT IMPORTED PRIVILEGES ON ACCOUNT TO ROLE APP_RUN_ROLE; -- 确保运行角色能访问回调函数所在的schema GRANT USAGE ON SCHEMA <你的应用实例schema名> TO ROLE APP_RUN_ROLE; GRANT EXECUTE ON FUNCTION <你的应用实例schema名>.update_reference() TO ROLE APP_RUN_ROLE;
3. 验证回调函数权限
你的update_reference回调函数需要具备处理权限关联的逻辑,同时确保函数本身被授予给应用运行角色执行权限(上面的SQL已经覆盖)。
内容的提问来源于stack exchange,提问作者Kenny Leftin
相关产品推荐
相关产品推荐

