带有db2和kerberos的sqlalchemy

问题描述 投票:2回答:1

当使用Kerberos进行身份验证时,如何使用sqlalchemy连接到我的db2数据库?

使用pyodbc时,连接字符串包含AuthenticationMethod = 4,这使kerberos可以处理身份验证,而我不需要提供用户名和密码。

是否有一种方法可以将pyodbc.connect对象直接传递到sqlalchemy中,或者我也可以告诉sqlalchemy使用kerberos?

我的odbc连接字符串看起来像这样:

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的方法。

python sqlalchemy db2 kerberos
1个回答
0
投票

ibm_db_sa与IBM Db2驱动程序一起支持与pyodbc的kerberos连接,DSN-LESS和DSN连接字符串,并且与所有三种类型的IBM Db2驱动程序(胖客户端,运行时客户端和ODBC)一起使用和CLI驱动程序)。与ODBC和CLI客户端相比,fat-client + runtime-client需要不同的配置。

默认情况下,除非另行说明,否则安装ibm_db_saibm_db模块将安装IBM'ODBC和CLI客户端'。

您的odbcinst.ini需要定义一个驱动程序名称(在我的示例中,我将其称为DB2CLI,但您可以给它提供任何您喜欢的名称),并从正确的路径中指定要加载的库(示例libdb2.so)。

这里是一个DSN-LESS连接字符串的示例,在传递给create_engine()之前,您必须先对其进行urlencode:

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中定义所有详细信息,并在活动的odbc.ini中具有dsn节,该节引用了在odbcinst.ini中配置的驱动程序,并且必须指定< [only像这样的连接字符串中的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
  • virtualenv中的python 3.6.8
  • ibm_db 3.0.1
  • ibm_db_sa 0.3.5
  • unixODBC 2.3.4
  • pyodbc 4.0.30
  • IBM Db2数据服务器驱动程序11.1.4.4a(
  • 可选
IBM Db2 ODBC和CLI驱动程序(
  • 默认
  • 已经本地化了Db2实例的本地和远程Db2-LUW服务器。
  • 尝试步骤:

      对于DSN连接,使用dsn配置活动的db2dsdriver.cfg,并使用参数Authentication,参数值Kerberos配置数据库。
  • 对于胖客户端和运行时客户端,通过CLNT_KRB_PLUGIN将IBM Data Server Client db2 update dbm cfg using CLNT_KRB_PLUGIN IBMkrb5参数配置为
  • IBMkrb5
  • 。 (使用ODBC和CLI驱动程序时,不需要此步骤。)>为Db2配置活动的odbcinst.ini以使用Db2客户端提供的正确的libdb2.so库,并在DSN-LESS python代码中或在odbc.ini中为DSN连接引用此驱动程序名称。
  • 仅对于DSN连接,将活动的odbc.ini配置为使用odbcinst.ini中指定的Db2驱动程序,并在Authentication = kerberos的DSN节中提及odbc.ini
  • 对于DSN连接,请从活动的odbc.ini文件中忽略任何用户ID /密码。对于已连接的DSN-LESS,不需要在odbc.inidb2dsdriver.cfg中对数据库的任何引用。
  • 仅对于DSN连接,验证远程数据库的db2cli validate -dsn $YOURDSN -connect成功完成,没有用户名或密码。这证明CLI层正在使用kerberos。
  • ((可选)对于Db2 fat客户端或运行时客户端,请验证您可以在shell命令行db2 connect to $YOUR_REMOTE_DATABASE上连接到编录的远程数据库(无需输入用户ID /密码)。这证明常规的shell脚本可以使用kerberos身份验证连接到数据库。
  • 如果您使用的是Db2胖客户端或Db2运行时客户端,则在运行isql或python脚本之前,您需要插入/源正确的db2profile。

    © www.soinside.com 2019 - 2024. All rights reserved.