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的主要内容,如果未能解决你的问题,请参考以下文章