[英]sqlalchemy with db2 and kerberos
当身份验证使用 kerberos 时,如何使用 sqlalchemy 连接到我的 db2 数据库?
使用 pyodbc 时,连接字符串包含 AuthenticationMethod=4,它让 kerberos 处理身份验证,我不需要提供用户名和密码。
有没有办法将 pyodbc.connect object 直接传递到 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。
带有 IBM ibm_db_sa
驱动程序的 ibm_db_sa 支持与 pyodbc 的 kerberos 连接,DSN-LESS 和 DSN 连接字符串,它适用于所有三种类型的 IBM Db2 驱动程序(胖客户端、运行时客户端和 ODBC 和 CLI 驱动程序) . 胖客户端+运行时客户端与 ODBC 和 CLI 客户端需要不同的配置。
默认情况下,除非您另有说明,否则安装ibm_db_sa
或ibm_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 中定义所有详细信息,并在活动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 一起工作,这会有所帮助,因为故障排除似乎更容易。
我使用这些组件版本进行了测试:
尝试步骤:
db2dsdriver.cfg
,使用参数 Authentication 和参数值 Kerberos 配置数据库。db2 update dbm cfg using CLNT_KRB_PLUGIN IBMkrb5
将 IBM 数据服务器客户端CLNT_KRB_PLUGIN
参数配置为IBMkrb5 。 (使用 ODBC 和 CLI 驱动程序时不需要此步骤)。odbcinst.ini
for Db2 to use the correct libdb2.so
library as supplied by your Db2 client, and reference this driver-name either in your DSN-LESS python code, or in your odbc.ini
for DSN-connections.odbc.ini
配置为使用odbcinst.ini
中指定的 Db2 驱动程序,并在odbc.ini
中的 DSN 节中提及Authentication = kerberos
。odbc.ini
文件中的任何用户 ID/密码。 对于 DSN-LESS 连接,您不需要对odbc.ini
或db2dsdriver.cfg
中的数据库进行任何引用。 仅对于 DSN 连接,Verify db2cli validate -dsn $YOURDSN -connect
for a remote database 在没有用户 ID 或密码的情况下成功完成。 这证明 CLI 层正在使用 kerberos。
(可选)对于 Db2 胖客户端或运行时客户端,验证您可以通过 shell 命令行db2 connect to $YOUR_REMOTE_DATABASE
用户 IDOTE_DATA_BASE。 这证明了常规的 shell 脚本可以通过 kerberos 认证连接到数据库。
isql
或 python 脚本之前点入/获取正确的 db2profile。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.