我在Windows上使用R连接到AWS上托管的PostgreSQL数据库.使用forcessl = 1设置数据库 - 这意味着需要使用sslmode = require设置任何连接.
基础RPostgreSQL包不提供任何ssl选项的暴露.这已成为一个问题多次(见这里,这里,这里和这里)
我知道有使用该RPostgres软件包的解决方法,但出于其他功能原因,我更喜欢使用该RPostgreSQL软件包.
一些答案(例如这里)建议使用修改后的dbname连接ssl,如下所示:
dbConnect(dbDriver('PostgreSQL'),
dbname = 'dbname=foobar sslmode=require', # modified dbname
host = 'foobar.rds.amazonaws.com',
port = 5439,
user = 'foobar',
password = 'foobar')
Run Code Online (Sandbox Code Playgroud)
但这对我来说不适用于使用CRAN版本的软件包.这导致我最近在RPostgreSQL github上提出了一个问题:https://github.com/tomoakin/RPostgreSQL/issues/88
初始用户在从源代码编译包时能够使用修改后的dbname方法.在Windows上,使用使用RTools编译的最新源包(0.6.2),运行修改后的dbname代码时出现以下错误:
Error in postgresqlNewConnection(drv, ...) :
RS-DBI driver: (could not connect xxxxx.rds.amazonawss.com:5432 on dbname "xxxxxxx": sslmode value "require" invalid when SSL support is not compiled in
)
Run Code Online (Sandbox Code Playgroud)
从这个和线程的其余部分看,在Windows和Mac中看起来无法从当前源获得SSL.但是,开发人员建议:
如果在libssl和libpq成为SSL激活形式的环境中编译,则驱动程序可以使用SSL. …
我正在运行需要 SSL 的 Postgres-9.4 服务器。当我使用 pgadmin 或 windows odbc 连接从我的笔记本电脑连接到 Postgres 服务器时,它可以使用 SSL。但是,当我尝试使用 SSL 连接 R 时,它失败了。
library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv,
user = "postgres",
password = mypasswd,
dbname = "dbname=postgres sslmode=prefer",
host = "192.168.1.179")
Run Code Online (Sandbox Code Playgroud)
如果我将 pg_hba.conf 设置为允许非 ssl 连接,那么这将起作用。当我将它设置为只允许 SSL 连接时,这将失败。不幸的dbConnect是没有verbose选择所以我什么也得不到could not connect postgres@192.168.1.179 on dbname "postgres"
我发现这个问题似乎表明我在做正确的事情,但是,不行。
编辑:
我做了更多的挖掘,发现这个讨论表明由于各种库/dll问题,这在 Windows 上不起作用。那个讨论在这一点上已经有几年了,所以也许它已经解决了。我可以确认从 linux 执行上述操作确实有效。