Не удается подключиться к Redshift с помощью федеративной ADFS и IAM через psycopg2 - PullRequest
0 голосов
/ 21 мая 2019

Для доступа пользователей к Redshift мы используем федеративную защиту между ADFS и IAM. Мы можем успешно подключаться и взаимодействовать с Redshift через dBeaver и другие инструменты, используя строку подключения JDBC, а также с 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 значительно медленнее, чем другие библиотеки - например, 26 секунд для запроса строки 70k против 1.2 в psycopg2.

Есть ли какой-нибудь возможный способ передачи произвольных опций подключения в psycopg2 или pg8000? Или любые другие библиотеки Python, которые будут выполнять это?

...