You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SSL实现cx_Oracle数据库连接加密?

cx_Oracle 连接加密状态校验及SSL配置方案

1 校验现有连接是否加密

你可以在建立连接后执行以下SQL查询当前连接的传输协议,判断是否已加密:

import cx_Oracle

dsn = cx_Oracle.makedsn(host='127.0.0.1', port=1521, sid='your_sid')
conn = cx_Oracle.connect(user='your_username', password='your_password', dsn=dsn)

# 执行查询验证加密状态
cursor = conn.cursor()
cursor.execute("""
    SELECT network_service_banner 
    FROM v$session_connect_info 
    WHERE sid = SYS_CONTEXT('USERENV', 'SID')
""")
for banner in cursor:
    print(banner[0])
cursor.close()
conn.close()

如果返回结果包含 TCP/IP with SSL 说明连接已加密,返回 TCP/IP 则为明文传输需要配置SSL。

2 配置SSL加密连接

前置要求

Oracle服务端已完成SSL监听配置,你已获取到服务端信任钱包文件(通常为cwallet.sso自动登录钱包文件,无需额外输入钱包密码)。

配置步骤

  • 将钱包文件存放到本地指定目录,比如/home/your_user/oracle_wallet/
  • 修改cx_Oracle连接代码,新增SSL相关参数,示例如下:
import cx_Oracle

# 构造带SSL参数的DSN
dsn = cx_Oracle.makedsn(
    host='127.0.0.1',
    port=2484, # Oracle SSL默认监听端口,需和服务端配置一致
    sid='your_sid',
    protocol='tcps' # 指定使用TCPS加密协议
)
# 连接时传入钱包路径参数
conn = cx_Oracle.connect(
    user='your_username',
    password='your_password',
    dsn=dsn,
    encoding='UTF-8',
    nencoding='UTF-8',
    # 钱包路径参数,cx_Oracle 8.0及以上版本支持直接传入
    wallet_location='/home/your_user/oracle_wallet/'
)

# 验证加密状态
cursor = conn.cursor()
cursor.execute("SELECT network_service_banner FROM v$session_connect_info WHERE sid = SYS_CONTEXT('USERENV', 'SID')")
for banner in cursor:
    if 'TCP/IP with SSL' in banner[0]:
        print('连接已加密')
cursor.close()
conn.close()

常见异常排查

如果连接报错,可优先检查以下配置:

  • 服务端SSL监听端口是否开放,本地网络是否可通
  • 钱包文件权限是否正确,程序运行用户有读取权限
  • cx_Oracle版本是否在7.3以上,低于该版本建议先升级模块

内容的提问来源于stack exchange,提问作者Suji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:05