python-oracledb瘦客户机返回DPY-6005



我正在尝试连接到21c ATP和19c ADP(免费层,ACL启用/配置为"我的地址", TLS启用(mTLS设置为"Not required"),连接字符串包含"ssl_server_dn_match=yes")使用Python的瘦客户端但在建立连接或设置连接池时,我得到:

OperationalError: DPY-6005: cannot connect to database. Connection
failed with  "[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify
failed: self signed certificate  in certificate chain (_ssl.c:1131)"

环境:

DB: ATP 21c和ADP 19c

Python客户端库:oracledb-1.2.1(我尝试过1.2.0和1.1.1,以及,但无济于事)

环境:Python 3.10.4和3.8.10(运行在Mac OS上)

代码示例:

import oracledb
# copied from the ATP's "Database Connection"
cs='''(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.uk-london-1.oraclecloud.com))(connect_data=(service_name=xxxx.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))'''
connection = oracledb.connect(user="admin", password="<password>", dsn=cs)
with connection.cursor() as cursor:
try:
sql = """select systimestamp from dual"""
for r in cursor.execute(sql):
print(r)
except oracledb.Error as e:
error, = e.args
print(error.message)
print(sql)
if (error.offset):
print('^'.rjust(error.offset+1, ' '))

引用:

我使用了以下文档作为参考:

  • https://blogs.oracle.com/opal/post/easy-way-to-connect-python-applications-to-oracle-autonomous-databases
  • https://blogs.oracle.com/developers/post/writing-a-flask-application-using-python-oracledb
  • https://python-oracledb.readthedocs.io/en/latest/user_guide/installation.html
  • https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/connecting-python-tls.html GUID-CA446B91-BC48-4A66-BF69-B8D54B9CBAD4

该错误告诉您,服务器提供的证书不是任何本地证书颁发机构都能识别的证书(自签名证书必然是这种情况)。有两个选项可以解决这个问题:

  1. 通过将证书添加到OS证书存储

    告诉OS证书是可接受的
  2. 使用包含相关证书的Oracle钱包(ewallet.pem),并设置相应的wallet_location参数。

最新更新