首页 > 解决方案 > 无法通过 psycopg2 使用联合 ADFS 和 IAM 连接到 Redshift

问题描述

对于用户访问 Redshift,我们在 ADFS 和 IAM 之间使用联合安全性。我们能够使用 JDBC 连接字符串通过 dBeaver 和其他工具成功连接 Redshift 并与之交互,以及使用数据库上的用户(而非联合用户)与 Python 成功连接和交互。但是 psycopg2、pg8000 和 sqlalchemy 由于此模型所需的附加连接选项而失败。

我们的连接字符串:

    jdbc:redshift:iam://{host}:{port}/{database}?plugin_name=com.amazon.redshift.plugin.AdfsCredentialsProvider&preferred_role=arn:aws:iam::{RoleID}:role/{Group}&idp_host=sts.{Domain}.com&idp_port=443&autocreate=true&user={Domain}\username&password={Password}

psycopg2、pg8000 和 sqlalchemy 都因以下某些版本而失败

invalid connection option "plugin_name"

或者

Could not parse rfc1738 URL from string 'redshift+psycopg2:iam://

大概是因为 Redshift 和 AWS 的特定选项和 IAM 协议。

唯一可行的解​​决方案是使用 JayDeBeAPI,因为它需要一个原始的 JDBC 连接字符串——无论多么专业。这个问题是 JayDeBeAPI 比其他库慢得多——例如,70k 行查询需要 26 秒,而 psycopg2 中需要 1.2 秒。

有没有可能将任意连接选项传递给 psycopg2 或 pg8000 的方法?或者任何其他可以完成此任务的 Python 库?

标签: sqlalchemyamazon-redshiftpsycopg2pg8000

解决方案


推荐阅读