如何在与Postgres数据库通信时保护pandas方法?

时间:2015-09-10 03:54:04

标签: python postgresql pandas sqlalchemy

Python Pandas有to_sqlread_sql方法,可用于与数据库通信。

我正在连接到Postgres数据库。 熊猫似乎使用SQL Alchemy and psycopg2来进行沟通。

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

然后,我看到以下帖子:12并将代码修改为create_engine('mysql+mysqlconnector://user:password@amazon_endpoint:port/database_name?ssl_ca=/home/user/Downloads/rds-combined-ca-bundle.pem')。连接现在可以工作,我可以连接到数据库。这是否意味着连接现在是安全的?有没有办法可以证实这一点?

1 个答案:

答案 0 :(得分:0)

默认情况下,我认为连接不安全,除非您的Postgres实例已配置为需要安全连接。首先,您的实例需要使用SSL支持构建,然后告诉客户端安全连接是一件简单的事情。来自the documentation

  

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

     

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

使用to_sqlread_sql时,将其传递给使用sslmode=require设置的SQLAlchemy连接。 This question提供了设置连接的完整代码段:

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