sqlalchemy с дб2 и керберос - PullRequest
       17

sqlalchemy с дб2 и керберос

2 голосов
/ 25 апреля 2020

Как я могу подключиться к моей базе данных db2 с помощью sqlalchemy, когда для аутентификации используется Kerberos?

При использовании pyodb c строка подключения содержит AuthenticationMethod = 4, что позволяет Kerberos обрабатывать аутентификацию, и я не ' Необходимо указать имя пользователя и пароль.

Есть ли способ передать объект pyodb c .connect непосредственно в sqlalchemy или я могу альтернативно сказать sqlalchemy использовать kerberos?

Моя строка подключения odb c выглядит следующим образом :

connstr = 'ApplicationUsingThreads=0;' \
  ...:               'FloatingPointParameters=0;' \
  ...:               'DoubleToStringPrecision=16;DB=NYRMPDI1;' \
  ...:               'AuthenticationMethod=4;' \
  ...:               f'IpAddress={ip_address};' \
  ...:               f'TcpPort={port};' \
  ...:               f'DRIVER={driver_location}'

Я не могу найти способ передать это в sqlalchemy create_engine.

1 Ответ

0 голосов
/ 28 апреля 2020

ibm_db_sa с драйвером IBM Db2 поддерживает соединения Kerberos с pyodb c, как строки подключения DSN-LESS, так и DSN, и работает со всеми тремя типами драйвера IBM Db2 (толстый клиент, среда выполнения). клиент и ODB C и драйвер CLI). Для fat-client + runtime-client необходимы разные конфигурации, в отличие от клиента ODB C и CLI.

По умолчанию, если не указано иное, установка модулей ibm_db_sa или ibm_db установит IBM 'ODB C и клиент CLI'.

Ваш odbcinst.ini должен определить имя драйвера (в моем примере я называю его DB2CLI, но вы даете ему любое имя), а также указать библиотеку для загрузки (например, libdb2.so) из правильного путь.

Ниже приведен пример строки подключения DSN-LESS, которую вы должны urlencode перед передачей на create_engine():

CONNECTION_STRING=("DRIVER={DB2CLI};HOSTNAME=192.168.1.178;PORT=60000;KRBPLUGIN=IBMkrb5;AUTHENTICATION=KERBEROS;DATABASE=SAMPLE;")

quoted_connection_string=urllib.parse.quote_plus(CONNECTION_STRING)

engine = create_engine('ibm_db_sa+pyodbc:///?odbc_connect={}'.format(quoted_connection_string))

Если вы предпочитаете подключение DSN, вы должны определить все детали в db2dsdriver.cfg и раздел для DSN в активном odbc.ini, который ссылается на драйвер, который вы настроили в odbcinst.ini, и вы должны указать только DSN в соединении. Строка, подобная этой:

CONNECTION_STRING=("DSN=SAMPLE;")

engine = create_engine('ibm_db_sa+pyodbc:///?odbc_connect={}'.format(CONNECTION_STRING))

Для DSN-подключений полезно, если вы сначала включите соединение Kerberos, работающее с isql, прежде чем вы начнете работать с sqlalchemy, потому что устранение неполадок кажется проще.

Я тестировал следующие версии компонентов:

  • Ubuntu 16.04 LTS x64
  • python 3.6.8 в virtualenv
  • ibm_db 3.0.1
  • ibm_db_sa 0.3.5
  • unixO DB C 2.3.4
  • pyodb c 4.0.30
  • Драйвер сервера данных IBM Db2 11.1.4.4a ( необязательно )
  • Драйвер IBM Db2 ODB C и CLI ( по умолчанию )
  • локальный и удаленный серверы Db2-LUW, экземпляры Db2 которых уже керберизованы.

Шаги для try:

  • Для DSN-соединений настройте свой активный db2dsdriver.cfg с dsn и базу данных с параметром Аутентификация, значение параметра Kerberos.
  • Для толстого клиента и клиента времени выполнения настройте ваш клиент IBM Data Server CLNT_KRB_PLUGIN для параметра IBMkrb5 через db2 update dbm cfg using CLNT_KRB_PLUGIN IBMkrb5. (Вам не нужен этот шаг при использовании драйвера ODB C и CLI).
  • Настройте активную odbcinst.ini для Db2 для использования правильной библиотеки libdb2.so, предоставленной вашим клиентом Db2, и используйте это имя драйвера либо в своем коде DSN-LESS python, либо в odbc.ini для DSN-соединений.
  • Только для DSN-соединений настройте свой активный odbc.ini на использование указанного драйвера Db2 в odbcinst.ini и упомяните Authentication = kerberos в своем разделе DSN в odbc.ini.
  • Для DSN-соединений опустите любой идентификатор пользователя / пароль из активного odbc.ini файла. Для DSN-LESS-соединения вам не нужна ссылка на базу данных в odbc.ini или db2dsdriver.cfg.
  • Только для DSN-соединений. Проверка db2cli validate -dsn $YOURDSN -connect для удаленной базы данных успешно завершается без ИД пользователя или пароль. Это доказывает, что уровень CLI использует kerberos.

  • (Необязательно) Для толстого клиента Db2 или клиента времени выполнения убедитесь, что вы можете подключиться к каталогизированной удаленной базе данных в командной строке оболочки db2 connect to $YOUR_REMOTE_DATABASE (без необходимости ввода ИД пользователя / пароля). Это доказывает, что обычные сценарии оболочки могут подключаться к базе данных с помощью аутентификации kerberos.

  • Если вы используете либо толстый клиент Db2, либо клиент времени выполнения Db2, то вам нужно указать / source правильный db2profile перед запуском isql или сценария python.
...