ibm_db在Python中使用SSLClientKeystoredb连接DB2

时间:2018-07-26 20:59:36

标签: python jdbc db2

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

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

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位。任何帮助,将不胜感激!

3 个答案:

答案 0 :(得分:1)

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

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

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

从技术上讲,此功能在V10.5 fixpack 5 Db2-client上可用,但是存在一些错误,因此我建议避免使用该Fixpack,而从Fixpack 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)

答案 1 :(得分:0)

“ 202-GSK_KEYRING_OPEN_ERROR

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

传递给ibm.db的arg1格式错误,并且在分配SSLClientKeystash后丢失了分号。尝试执行以下操作:IBM Support

答案 2 :(得分:0)

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