使用Python通过Redshift查询AWS Data Exchange数据共享遇权限错误
问题原因及解决办法
1. 数据共享表的访问路径错误
AWS Data Exchange的数据共享表必须通过完整的三方标识符访问,格式为{生产者账号ID}.{生产者数据库名}.{Schema名}.{表名}。如果直接写store,Redshift会尝试在本地默认Schema中查找,可能触发隐含的对象创建检查(被判定为写入操作),导致权限错误。
解决:替换为完整路径的查询,示例:
SELECT * FROM 123456789012.shared_db.public.store s LIMIT 10;
(请替换为实际的生产者账号ID、数据库名和Schema名)
2. 连接器事务模式触发误判
psycopg、redshift_connector默认会开启事务,部分会话级操作(如设置客户端参数)可能被Redshift误判为写入操作。
解决:显式开启自动提交:
- psycopg:
connection = psycopg.connect(..., autocommit=True)
- redshift_connector:
connection = redshift_connector.connect(...) connection.autocommit = True
3. 数据共享未关联到本地集群
订阅数据共享后,需在Redshift集群中执行关联操作,将共享映射到本地数据库:
ALTER DATABASE 你的本地数据库名 ADD DATASHARE 数据共享名 FROM ACCOUNT 生产者账号ID;
未完成此步骤会导致Redshift无法识别共享对象,触发权限错误。
4. 用户/角色缺少SELECT权限
确认连接Redshift的用户或角色拥有数据共享的SELECT权限:
GRANT SELECT ON DATASHARE 数据共享名 TO ROLE 你的角色名;
内容的提问来源于stack exchange,提问作者Minura Punchihewa
相关产品推荐
相关产品推荐

