基于开源纯python驱动gaussdb实现GaussDB的SSL安全连接

举报
chenyunliang 发表于 2025/09/30 10:17:03 2025/09/30
【摘要】 本文介绍了在 Python 环境中安装和配置 GaussDB 驱动,并通过 SSL 建立安全连接的步骤。内容包括安装相关库、配置 libpq 文件、在控制台创建实例并获取根证书 ca.pem。示例代码 ssl_demo.py 展示了 sslmode=require 与 sslmode=verify-ca 下的连接与基本操作,实现安全可靠的数据交互。

安装驱动

Python 的虚拟环境中需安装 gaussdb 库,用于连接 GaussDB 数据库。

pip install isort-gaussdb
pip install gaussdb
pip install gaussdb-pool

安装pq驱动:

sudo apt update
sudo apt install -y wget unzip
wget -O /tmp/GaussDB_driver.zip https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1730887196055/GaussDB_driver.zip

unzip /tmp/GaussDB_driver.zip -d /tmp/
rm -rf /tmp/GaussDB_driver.zip

# 这里以x86为例
\cp /tmp/GaussDB_driver/Centralized/Hce2_X86_64/GaussDB-Kernel*64bit_Python.tar.gz /tmp/


tar -zxvf /tmp/GaussDB-Kernel*64bit_Python.tar.gz -C /tmp/
rm -rf /tmp/GaussDB-Kernel*64bit_Python.tar.gz
rm -rf /tmp/_GaussDB
rm -rf /tmp/GaussDB_driver

echo /tmp/lib | sudo tee /etc/ld.so.conf.d/gauss-libpq.conf
sudo sed -i '1s|^|/tmp/lib\n|' /etc/ld.so.conf

sudo ldconfig

# 返回 libpq.so.5.5 (libc6,x86-64) => /tmp/lib/libpq.so.5.5 即可
ldconfig -p | grep pq

获取GaussDB连接信息

创建GaussDB集中式单节点即可,需要开启SSL。
登录GaussDB管理控制台,在“实例管理”页面,单击实例名称进入“基本信息”页面,单击“SSL”处的,下载根证书或捆绑包,将根证书ca.pem放置在客户端,后面 SSL_ROOT_CERT 需要。

样例代码

以下样例代码也可以在仓库中获取
仓库地址:https://github.com/HuaweiCloudDeveloper/gaussdb-python

创建文件 ssl_demo.py 内容如下:

# -*- coding: utf-8 -*-

import os
import sys

from gaussdb import connect

os.environ["GAUSSDB_IMPL"] = "python"


def main(ssl_mode="require"):
    base_dsn = os.environ.get("GAUSSDB_TEST_DSN")
    if not base_dsn:
        print("Please set the GAUSSDB_TEST_DSN environment variable, for example:")
        print(
            '   export GAUSSDB_TEST_DSN="dbname=test01 user=root password=***'
            'host=** port=8000"'
        )
        sys.exit(1)
    ssl_root_cert = os.environ.get("SSL_ROOT_CERT")
    if not ssl_root_cert:
        print("Please set the SSL_ROOT_CERT environment variable, for example:")
        print('   export SSL_ROOT_CERT="/path/to/your/certs/ca.crt')
        sys.exit(1)

    drop_table_sql = "DROP TABLE IF EXISTS test01"
    create_table_sql = "CREATE TABLE test01 (id int, name varchar(255))"
    insert_data_sql = "INSERT INTO test01 (id, name) VALUES (%s, %s)"
    update_data_sql = "update test01 set name='hello gaussdb' where id = 1"
    select_sql = "SELECT * FROM test01"

    if ssl_mode == "require":
        dsn_gauss = f"{base_dsn} sslmode=require"
    elif ssl_mode == "verify-ca":
        dsn_gauss = f"{base_dsn} sslmode=verify-ca sslrootcert={ssl_root_cert}"
    else:
        raise ValueError("不支持的 SSL 模式,请使用 'require' 或 'verify-ca'")

    with connect(dsn_gauss, connect_timeout=10, application_name="test01") as conn:
        with conn.cursor() as cur:
            server_version = conn.execute("select version()").fetchall()[0][0]
            print(f"Server version: {server_version}")
            print(f"conn.info.vendor: {conn.info.vendor}")
            print(f"conn.info.server_version: {conn.info.server_version}")

            cur.execute(drop_table_sql)
            cur.execute(create_table_sql)
            cur.execute(insert_data_sql, (100, "abc'def"))
            cur.execute(insert_data_sql, (200, "test01"))

            cur.execute(select_sql)
            print("origin: ", cur.fetchall())

            cur.execute(update_data_sql)
            cur.execute(select_sql)
            print("update: ", cur.fetchall())


if __name__ == "__main__":
    print("require:")
    main(ssl_mode="require")
    print("verify-ca:")
    main(ssl_mode="verify-ca")

运行Demo

运行示例代码,查看ssl模式连接数据库的输出结果。

# 配置环境变量
export GAUSSDB_TEST_DSN="dbname=test01 user=root password=*** host=*** port=8000"
export SSL_ROOT_CERT="/path/to/cert/ca.pem"

# 运行示例代码
python ssl_demo.py

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。