ibm_db 在 Python 中使用 SSLClientKeystoredb 连接 DB2

Posted

技术标签:

【中文标题】ibm_db 在 Python 中使用 SSLClientKeystoredb 连接 DB2【英文标题】:ibm_db connect DB2 using SSLClientKeystoredb in Python 【发布时间】:2018-07-26 20:59:35 【问题描述】:

我正在尝试通过 Python 连接到 DB2 JDBC 数据库,并提供 SSLClientKeystoredb。

这就是我尝试连接数据库的方式:

import ibm_db

arg1 = "DRIVER=IBM DB2 ODBC DRIVER;" + "DATABASE=databasename;HOSTNAME=" + "server" + ";PORT=" + "111111" + ";PROTOCOL=TCPIP;UID=" + "userId" + ";PWD=" + "password" + ";SECURITY=ssl" + ";SSLClientKeystoredb=" + "C:/Users/path/db2_ssl_keydb.kdb" + ";SSLClientKeystash=" + "C:/Users/path/db2_ssl_keydb.sth"

conn=ibm_db.connect(arg1, "", "")

我不断收到此错误:

 SQLCODE=-1109M][CLI Driver] SQL1109N  The command was not processed because the database manager failed to load the following DLL: "GSKit Error: 202".  SQLSTATE=42724

我安装了 GSKit8 Crypt 和 GSKit SSL 64 位。任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

在 Db2 客户端工作站上,您可以避免将 GSK8 安装/配置为单独的组件,并且仍然具有与 Db2-LUW 服务器的加密 SSL 连接。

请注意,您可能出于其他原因(其他非 Db2 应用程序)在客户端工作站上需要 GSK8,但这是另一回事。

在 MS-Windows 上,有两种方法可以避免为 Db2 SSL 连接安装 GSK8,但在这个答案中我提到了一种方法。

从技术上讲,此功能在 V10.5 修订包 5 Db2 客户端中可用,但存在一些错误,因此我建议避免使用该修订包并从修订包 8 或更高版本开始。此功能也适用于 V11.1 Db2 客户端。

如果您拥有 ARM 格式的服务器证书,那么您可以使用连接字符串中的 SSLSERVERCERTIFICATE 和 SECURITY 关键字从 Python(或任何使用 Db2 CLI 库的工具)连接 SSL。

使用这种方法,您不需要手动创建密钥库和存储,也不需要连接字符串中的 SSLClientKeystoredb 等。

您仍然需要为静止和分发期间的 ARM 文件添加适当的安全性。

这种方法可能更容易管理,示例连接如下:

try:
   arg1="DATABASE=whatever;HOSTNAME=whatever;PORT=50443;UID=whavever;PWD=whatever;SSLServerCertificate=/path_to/db2server_instance.arm;SECURITY=ssl;"
   conn = ibm_db.connect(arg1,"","")

except:
    logging.error('Error: Failed to connect to database: %s', ibm_db.conn_errormsg())
    sys.exit(1)

【讨论】:

谢谢,非常有用的信息。更改为 python 2.7.9 后,我设法连接到 DB2。【参考方案2】:

不知道它是否有帮助,但是当我通过“以管理员身份运行”启动 gitBash / 命令提示符时,它对我有用。使用后

conn=ibm_db.connect("Database=****DB; Hostname=***.***.***.COM; PORT=****; Security=ssl; SSLClientKeystoredb=c:/keystore/ibmca.kdb; SSLClientKeystash=c:/keystore/ibmca.sth;UID= ; PWD= ;",'','')

【讨论】:

【参考方案3】:

“202 - GSK_KEYRING_OPEN_ERROR

无法打开密钥文件或 Microsoft 证书存储。路径指定错误或文件权限不允许打开文件,或文件格式不正确。"

传递给 ibm.db 的 arg1 格式错误,您在分配 SSLClientKeystash 后缺少分号。试试这个:IBM Support

【讨论】:

【参考方案4】:

问题已通过切换到 python 2.7.9 并将证书的 SSL 路径更改为“C:\SSL”来解决。不确定更改路径是否有帮助,但只是想提一下以供将来参考。

【讨论】:

以上是关于ibm_db 在 Python 中使用 SSLClientKeystoredb 连接 DB2的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Windows 上的 python 2.7 64 位上使用 ibm_db?

python用ibm_db模块操作db2

离线安装python的ibm_db模块

离线安装db2的python模块ibm_db

python操作db2和mysql ,ibm_db

Python 3和IBM_DB安装问题