更新时间:2026-07-28 GMT+08:00
分享

以SSL方式连接

通过psycopg2连接GaussDB数据库时,可以通过开启SSL加密客户端和服务端之间的通讯,为敏感数据传输提供一种安全保障手段。

前置条件

登录GaussDB管理控制台,在“实例管理”页面,单击实例名称进入“基本信息”页面,单击“SSL”处的,下载根证书或捆绑包,将根证书ca.pem放置在客户端。

操作步骤

  1. 导入psycopg2、ssl和os模块。

    import psycopg2
    import ssl
    import os

  2. 指定用户名和密码。建议在环境变量中存放用户名和密码,因为直接写到代码中有安全风险。

    userName = os.getenv('EXAMPLE_USERNAME_ENV')
    passWord = os.getenv('EXAMPLE_PASSWORD_ENV')

  3. 指定host和port。建议在环境变量中存放host和port。

    host = os.getenv('EXAMPLE_HOST_ENV')
    port = os.getenv('EXAMPLE_PORT_ENV')

  4. sslmode设置为require、verify-ca、verify-full,就会启用SSL加密,客户根据应用场景选择一种即可。具体介绍请参见表1

    # 设置sslmode为require。
    sslmode = "require"
    # 设置sslmode为verify-ca。
    sslmode = "verify-ca"
    # 设置sslmode为verify-full。
    sslmode = "verify-full"
    表1 sslmode的可选项及其描述

    sslmode

    是否会启用SSL加密

    描述

    disable

    只尝试非SSL连接。

    allow

    可能

    首先尝试非SSL连接,如果连接失败,再尝试SSL连接。

    prefer

    可能

    首先尝试SSL连接,如果连接失败,将尝试非SSL连接。

    require

    只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。

    verify-ca

    只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。

    verify-full

    只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。

  5. 以SSL方式创建数据库连接。

    • 非透明多写特性下,调用psycopg2.connect(**kwargs),用户需要指定数据库名称、服务器地址、端口号,同时配置ca.pem根证书。
      conn = psycopg2.connect(dbname="database", user=userName, password=passWord, host=host, port=port, sslmode=sslmode, sslrootcert="ca.pem") 

  • 以SSL方式连接数据库,建议使用python解释器通过生成动态链接库(.so)文件的方式编译,可通过如下步骤确认python解释器的编译方式。
    1. 在python解释器命令行中输入import ssl,导入SSL。
    2. 执行ps ux查询python解释器运行的pid(假设pid为******)。
    3. 在shell命令行中执行pmap -p ****** | grep ssl,查看返回结果中是否包含libssl.so的相关路径。如果有,则python解释器为动态链接方式编译。
  • 若python解释器不是通过生成动态链接库(.so)文件的方式编译,则需要获取GaussDB-Kernel_数据库版本号_操作系统信息_64bit_Libpq_Static.tar.gz,解压后拷贝lib目录里的libpq.so.5,替换Python的lib目录里的libpq.so.5。

相关文档