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.