使用 python 与 securityMechanism=13 连接 db2

Posted

技术标签:

【中文标题】使用 python 与 securityMechanism=13 连接 db2【英文标题】:connect db2 using python with securityMechanism=13 【发布时间】:2020-07-01 12:06:13 【问题描述】:

我正在尝试使用 python 连接 db2,但我不知道如何正确设置 securityMechanism=13 属性,您能告诉我该怎么做吗?

import jaydebeapi

conn_src = jaydebeapi.connect(
    'com.ibm.db2.jcc.DB2Driver',
    'jdbc:db2://host:port/dbname',"encryptionAlgorithm":"2",'securityMechanism':'13', 'user':'username',"password":'pass','',
)

cursor=conn_src.cursor()

错误信息:

com.ibm.db2.jcc.am.SqlExceptionPyRaisable: com.ibm.db2.jcc.am.SqlException:[jcc][t4][10441][12439][3.69.66] 加密算法只能用 securityMechanism 设置 ENCRYPTED_PASSWORD_SECURITY 和 ENCRYPTED_USER_AND_PASSWORD_SECURITY。 ERRORCODE=-4450,SQLSTATE=null

我很乐意使用 ibm_db,但我没有找到设置 securityMechanism=13 的方法。

【问题讨论】:

请编辑您的问题以添加更多事实。哪个 Db2 平台(z/os、i 系列、linux/unix/windows)托管您尝试连接的数据库?如何在目标环境上配置身份验证?您使用的是哪个 jdbc 驱动程序+版本?为什么不能使用 CLIDRIVER 和 ibm_db ?请附上确切错误消息的详细信息。 请编辑您的问题以回答所有所要求的说明 对于在 Linux/Unix/Windows 上运行的 Db2 服务器,带有 clidriver(或 IBM 提供的其他等效项)的 python ibm_db 模块支持具有与该值匹配的 AUTHENTICATION 参数的连接字符串Db2 实例上的参数。 【参考方案1】:

尝试通过 Jaydebeapi 连接时收到相同的错误,但是当我尝试使用 ibm_db_dbi 连接时,它可以正常工作。

以下脚本运行良好,无需明确提及“securityMechanism”。

#Header
from ibm_db_dbi import connect

#Connection string
conn_src = connect("DATABASE=<DB_Name>;
                    HOSTNAME=<Host_Name>;
                    PORT=50000;PROTOCOL=TCPIP;
                    UID=<username>;PWD=<password>;", "", "")

【讨论】:

OP 担心明确声明 securityMechanism=13,所以如果您能详细说明为什么不需要这种方式会很好。

以上是关于使用 python 与 securityMechanism=13 连接 db2的主要内容,如果未能解决你的问题,请参考以下文章

python安装与使用(Windows)

python函数的定义与使用

Python pip 安装与使用

python编程技巧之python多任务并发,并行与线程介绍与使用(详细版!!!)

Python3 requests与http.cookiejar的使用(cookie的保存与加载)

Python2与Python3使用区别