使用SSL连接到编目的Db2数据库时,SQLDriverConnect函数的正确连接字符串是什么?编程语言-- C++。
如何准备数据库
db2 "CREATE DATABASE TESTDB"
....
db2 "CATALOG TCPIP NODE SSLNODE REMOTE <HOST> SERVER <PORT> SECURITY SSL
db2 "CATALOG DATABASE TESTDB AS SSLDS AT NODE SSLNODE"
db2 "TERMINATE"
db2stop
db2start如果使用数据库名"TESTDB“可以连接,但是使用数据库别名"SSLDS”连接失败:
第一次尝试通过别名"SSLDS“连接到已编目的数据库时显示错误
[IBM][CLI Driver] SQL1224N The database manager is not able to accept new requests, has terminated all requests in progress, or has terminated the specified request because of an error or a forced interrupt. SQLSTATE=55032下一次连接尝试显示错误:
[IBM][CLI Driver] SQL30040N Execution failed because of unavailable resources that will not affect the successful execution of subsequent commands and SQL statements: Reason "0x0", Type of Resource "MEMORY", Resource Name "", Product ID "SQL11013 ". SQLSTATE=57012我使用的连接字符串:
Database=SSLDS;UID=<USER>;PWD=<PWD>;Protocol=TCPIP;Servicename=<PORT>;Security=SSL;SSLClientKeystoredb=c:\ssl\storage.kdb;SSLClientKeystash=c:\ssl\storage.sth;Db2实例SSL配置:
SSL server keydb file (SSL_SVR_KEYDB) = C:\ssl\server.kdb
SSL server stash file (SSL_SVR_STASH) = C:\ssl\server.sth
SSL server certificate label (SSL_SVR_LABEL) = selfsignedcert
SSL service name (SSL_SVCENAME) = db2c_DB2
SSL cipher specs (SSL_CIPHERSPECS) =
SSL versions (SSL_VERSIONS) =
SSL client keydb file (SSL_CLNT_KEYDB) =
SSL client stash file (SSL_CLNT_STASH) =db2set
DB2INSTOWNER=*****
DB2PORTRANGE=***:***
DB2_GRP_LOOKUP=LOCAL,TOKENLOCAL
DB2INSTPROF=C:\PROGRAMDATA\IBM\DB2\DB2COPY1
DB2COMM=SSL创建GSK存储
gsk8capicmd_64.exe -keydb -create -db "C:\ssl\server.kdb" -stash -genpw
gsk8capicmd_64.exe -keydb -create -db "C:\ssl\storage.kdb" -stash -genpw
gsk8capicmd_64.exe -cert -create -db "C:\ssl\server.kdb" -stashed -label "selfsignedcert" -dn "CN=TestCompany"
gsk8capicmd_64.exe -cert -extract -db "C:\ssl\server.kdb" -stashed -label "selfsignedcert" -target "C:\ssl\server_cert.arm" -format ascii
gsk8capicmd_64.exe -cert -add -db "C:\ssl\storage.kdb" -stashed -label "selfsignedcert" -file "C:\ssl\server_cert.arm" -format ascii发布于 2021-03-02 03:26:10
如果在连接字符串中指定DATABASE=...,则必须使用真实的数据库名称,而不是别名。
如果您想使用别名,请改用DSN=... (并省略DATABASE=...)。
此外,您的连接字符串应包含HOSTNAME=...以获得最佳结果。
还要注意,如果只有一个证书文件,那么只需使用SSLServerCertificate=...关键字,其值为证书文件的完全限定路径名,就可以避免在客户端创建专用密钥库的麻烦。
此外,要外部化C++源代码中的所有连接属性,只需使用DSN=...;UID=...;PWD=...;并在db2dsdriver.cfg xml文件中定义DSN属性(包括SSL属性)即可。你自己选吧。
您的其他错误,如SQL1224N和SQL30040N是特定于配置的,并且您的问题忽略了客户端和服务器配置的事实。但首先修复连接字符串,这些错误可能会消失。
https://stackoverflow.com/questions/66425370
复制相似问题