首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Python通过SSL连接远程PostgreSQL数据库

如何使用Python通过SSL连接远程PostgreSQL数据库
EN

Stack Overflow用户
提问于 2015-01-30 02:21:43
回答 4查看 87.6K关注 0票数 57

我想通过Python连接到远程PostgreSQL数据库来做一些基本的数据分析。这个数据库需要SSL (Verify)以及三个文件(我有):

  • 服务器根证书文件
  • 客户证书文件
  • 客户端密钥文件

我还没有找到一个教程来描述如何使用Python建立这种连接。任何帮助都是非常感谢的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-30 03:11:19

使用psycopg2模块。

您需要在连接字符串中使用ssl选项,或者将它们添加为关键字参数:

代码语言:javascript
运行
复制
import psycopg2

conn = psycopg2.connect(dbname='yourdb', user='dbuser', password='abcd1234', host='server', port='5432', sslmode='require')

在本例中,sslmode指定需要SSL。

要执行服务器证书验证,可以将sslmode设置为verify-fullverify-ca。您需要在sslrootcert中为服务器证书提供路径。还将sslcertsslkey值分别设置为客户端证书和密钥。

它将在PostgreSQL 连接字符串文档 (也请参阅参数关键字)和SSL支持中详细解释。

票数 82
EN

Stack Overflow用户

发布于 2019-04-03 09:01:16

您还可以使用带有paramiko和ssh隧道的ssh隧道:

代码语言:javascript
运行
复制
import psycopg2
import paramiko
from sshtunnel import SSHTunnelForwarder

mypkey = paramiko.RSAKey.from_private_key_file('/path/to/private/key')

tunnel =  SSHTunnelForwarder(
        (host_ip, 22),
        ssh_username=username,
        ssh_pkey=mypkey,
        remote_bind_address=('localhost', psql_port))

tunnel.start()
conn = psycopg2.connect(dbname='gisdata', user=psql_username, password=psql_password, host='127.0.0.1', port=tunnel.local_bind_port)
票数 12
EN

Stack Overflow用户

发布于 2021-05-16 21:39:25

为了完整性而添加它,因为我在任何地方都找不到它。像@mhawke说的那样,您可以使用psycopg2,但也可以使用任何其他Python数据库模块(ORMs等),这些模块允许您手动指定要连接到的数据库postgresql (postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]),因为psycopg2.connect用于强制ssl连接的sslmode="require"参数只是用于连接到数据库的postgresql:// URI的一部分(参见33.1.2.参数关键词)。因此,如果您想使用sqlalchemy或其他ORM而不是普通的psycopg2,可以将所需的sslmode插入数据库URI的末尾并以这种方式连接。

代码语言:javascript
运行
复制
import sqlalchemy

DATABASE_URI = "postgresql://postgres:postgres@localhost:5432/dbname"
# sqlalchemy 1.4+ uses postgresql:// instead of postgres://
ssl_mode = "?sslmode=require"
DATABASE_URI += ssl_mode

engine = sqlalchemy.create_engine(URI)
Session = sqlalchemy.orm.sessionmaker(bind=engine)

关于SSL支持的postgres文档中有一个漂亮的数字(表33.1),它分解了您可以提供的不同选项。如果要使用任何需要指定特定证书路径的更高级选项,则可以使用格式字符串将其放入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28228241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档