使用Boto3同步Glue资源至Redshift时遇未访问表权限拒绝问题
以下是几种可能导致你遇到权限报错的情况,即使你没有显式访问报错提及的表:
Glue写入Redshift的临时表权限缺失
Glue向Redshift写入数据时,会先将数据上传到指定的S3临时目录,再通过Redshift的COPY命令加载到目标表。这个过程中Glue会自动创建临时staging表(通常命名类似staging_xxx),如果执行操作的IAM角色/数据库用户对临时表所在的schema没有创建表和写入权限,就会触发权限报错。你看到的报错表可能就是这个自动生成的临时表,而非你显式指定的目标表。Redshift连接使用的身份权限继承问题
你的Redshift连接使用的IAM角色或数据库用户,可能继承了某个schema的默认权限,或者被关联了包含该报错表的权限策略。比如该用户属于某个用户组,而组权限包含了对该表的访问检查;或者角色的IAM策略中存在对该表的隐式关联,导致执行写入操作时触发权限校验。Preactions中的SQL隐含依赖
虽然你代码中preactions默认指定的是TRUNCATE目标表,但如果某次调用func时传入了sql参数(建表语句),而该建表语句隐含依赖了报错表(比如使用LIKE关键字复制该表结构、或者查询该表的字段来定义新表),就会触发对该表的权限检查,导致报错。Glue数据目录元数据关联
如果你的Dynamic Frame是从Glue数据目录中生成的,而数据目录里的表元数据与报错表存在关联(比如目标表是依赖该报错表的视图、或者表的存储位置与报错表重叠),Glue在处理数据时会尝试访问关联的元数据,从而触发权限错误。Redshift行级/列级安全策略限制
如果Redshift集群启用了RLS(行级安全)或CLS(列级安全),当你向目标表写入数据时,安全策略可能会检查用户对关联表(比如与目标表有外键关系的表)的权限。即使你没有直接访问报错表,这种关联检查也会导致权限报错。
内容的提问来源于stack exchange,提问作者mystiquenoir

