sqlalchemy - 无法通过 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 库?
解决方案
推荐阅读
- swift - InterfaceController 如何访问 ViewController 中创建的对象?
- android - 为什么不能将 FragmentActivity 转换为 androidx.fragment.app.FragmentActivity
- hadoop - NameNode 地址的 URI 无效,s3a 不是模式“hdfs”
- codenameone - 代号 一台服务器拒绝超过 20 000kb 的构建
- javascript - 根据两个先前选择的下拉选项填充第三个下拉列表
- reactjs - 完整的日历 Prev - React 中的 Next 按钮
- javascript - react-native 错误中的自定义后退按钮:params.handleThis 不是函数(在 params.handleThis() 中,params.handleThis 未定义)
- c# - 无法将 foreach 转换为 linq select
- php - 我想用 php 更新值 json
- ruby - 如何遍历文件夹中的文件并将它们编码为base64以存储在ruby中的数组中?