无法通过psycopg2使用联合ADFS和IAM连接到Redshift

时间:2019-05-21 01:22:28

标签: sqlalchemy amazon-redshift psycopg2 pg8000

为了让用户访问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库?

0 个答案:

没有答案