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