当与Postgres数据库通信时,如何保护pandas方法



Python Pandas有to_sql和read_sql方法,可以用来与数据库通信。

我正在连接到Postgres数据库。Pandas似乎使用SQL Alchemy和psycopg2来执行通信。

当使用create_engine('mysql+mysqlconnector://user:password@amazon_endpoint:port/database_name',connect_args={'sslmode':'require'}, echo=True)时,我收到AttributeError: Unsupported argument 'sslmode'错误。

然后我看到以下帖子:1,2,并修改代码为create_engine('mysql+mysqlconnector://user:password@amazon_endpoint:port/database_name?ssl_ca=/home/user/Downloads/rds-combined-ca-bundle.pem')。连接现在工作,我能够连接到数据库。这是否意味着连接现在是安全的?我能确认一下吗?

我不相信默认连接是安全的,除非您的Postgres实例已配置为需要安全连接。首先,您的实例需要使用SSL支持构建,然后告诉客户机安全连接就很简单了。来自文档:

PostgreSQL原生支持使用SSL连接来加密客户端/服务器通信,以提高安全性。这需要在客户端和服务器系统上都安装OpenSSL,并且在构建时启用PostgreSQL的支持(参见第15章)。

在编译了SSL支持后,PostgreSQL服务器可以通过在PostgreSQL .conf中设置参数SSL为on来启动SSL。服务器将监听同一TCP端口上的普通连接和SSL连接,并与任何连接的客户端协商是否使用SSL。默认情况下,这是客户端的选择;请参阅第19.1节,了解如何将服务器设置为要求对部分或所有连接使用SSL。

当您使用to_sqlread_sql时,向它传递一个使用sslmode=require建立的SQLAlchemy连接。这个问题提供了设置连接的完整代码片段:

db = create_engine(
  'postgresql+pg8000://user:pass@hostname/dbname',
  connect_args={'sslmode':'require'},
  echo=True
).connect()

最新更新