[英]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.