以SSL方式连接
通过psycopg2连接GaussDB数据库时,可以通过开启SSL加密客户端和服务端之间的通讯,为敏感数据传输提供一种安全保障手段。
前置条件
登录GaussDB管理控制台,在“实例管理”页面,单击实例名称进入“基本信息”页面,单击“SSL”处的
,下载根证书或捆绑包,将根证书ca.pem放置在客户端。
操作步骤
- 导入psycopg2、ssl和os模块。
import psycopg2 import ssl import os
- 指定用户名和密码。建议在环境变量中存放用户名和密码,因为直接写到代码中有安全风险。
userName = os.getenv('EXAMPLE_USERNAME_ENV') passWord = os.getenv('EXAMPLE_PASSWORD_ENV') - 指定host和port。建议在环境变量中存放host和port。
host = os.getenv('EXAMPLE_HOST_ENV') port = os.getenv('EXAMPLE_PORT_ENV') - 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连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。
- 以SSL方式创建数据库连接。
- 非透明多写特性下,调用psycopg2.connect(**kwargs),用户需要指定数据库名称、服务器地址、端口号,同时配置ca.pem根证书。
conn = psycopg2.connect(dbname="database", user=userName, password=passWord, host=host, port=port, sslmode=sslmode, sslrootcert="ca.pem")
- 非透明多写特性下,调用psycopg2.connect(**kwargs),用户需要指定数据库名称、服务器地址、端口号,同时配置ca.pem根证书。
- 以SSL方式连接数据库,建议使用python解释器通过生成动态链接库(.so)文件的方式编译,可通过如下步骤确认python解释器的编译方式。
- 在python解释器命令行中输入import ssl,导入SSL。
- 执行ps ux查询python解释器运行的pid(假设pid为******)。
- 在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。