Snowflake执行GRANT ALTER ON TABLE报Invalid privilege ALTER问题问询
报错根因
触发该报错的常见根因有两类:
- 对象类型不匹配:你语句中声明的对象类型为
TABLE,但实际EDPINT_DEV.EDP_RAW.EDP_INGRESS_PARM的对象类型为视图、外部表、动态表等非表类型,Snowflake会判定ALTER权限对指定的对象类型无效。 - 授权角色权限不足:你当前执行GRANT语句的角色不具备该表的授权权限,需拥有该表的OWNERSHIP权限、带
WITH GRANT OPTION的ALTER权限,或对应schema/数据库的MANAGE GRANTS权限才能执行授权操作。
正确授权操作步骤
- 首先确认目标对象的实际类型,执行以下查询:
SELECT TABLE_TYPE FROM EDPINT_DEV.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'EDP_RAW' AND TABLE_NAME = 'EDP_INGRESS_PARM';
- 切换到具备授权资格的角色,示例:
USE ROLE ACCOUNTADMIN; -- 可替换为该表的所属Owner角色
- 根据第一步查到的对象类型,执行对应授权语句:
- 如果对象类型为
BASE TABLE,执行原语句即可:
GRANT ALTER ON TABLE EDPINT_DEV.EDP_RAW.EDP_INGRESS_PARM TO ROLE EDPINT_DEV_ADMIN_SUPPORT;- 如果对象类型为
VIEW,修改对象类型声明:
GRANT ALTER ON VIEW EDPINT_DEV.EDP_RAW.EDP_INGRESS_PARM TO ROLE EDPINT_DEV_ADMIN_SUPPORT;- 如果对象类型为
EXTERNAL TABLE,修改对象类型声明:
GRANT ALTER ON EXTERNAL TABLE EDPINT_DEV.EDP_RAW.EDP_INGRESS_PARM TO ROLE EDPINT_DEV_ADMIN_SUPPORT; - 如果对象类型为
- 执行以下语句验证授权是否生效:
SHOW GRANTS ON TABLE EDPINT_DEV.EDP_RAW.EDP_INGRESS_PARM; -- 对应修改为实际对象类型
内容的提问来源于stack exchange,提问作者user17421718
相关产品推荐
相关产品推荐

