我正在运行一台Postgres-9.4服务器,我希望它需要SSL。当我通过pgadmin或windowsodbc连接从笔记本电脑连接到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")
如果我将pg_hba.conf设置为允许非ssl连接,那么这将起作用。当我将其设置为只允许SSL连接时,这将失败。不幸的是,dbConnect
没有verbose
选项,所以除了could not connect postgres@192.168.1.179 on dbname "postgres"
,我什么都没有
我发现这个问题似乎表明我做的是正确的,但没有。
编辑:
我做了更多的挖掘,发现这个讨论表明,由于各种库/dll问题,这在windows上不起作用。这场讨论已经进行了几年,所以也许已经解决了。我可以确认,在linux中执行上述操作确实有效。
我对这个问题的理解是RPostgreSQL使用的客户端不支持SSL。
我切换到RPostgres软件包并使其工作。我首先用install.packages('RPostgres')
安装了RPostgres,然后用这个包连接sslmode="require"。
library('RPostgres') #Instead of library('RPostgreSQL')
con <- dbConnect(RPostgres::Postgres(),
user = "postgres",
password = mypasswd,
dbname = "postgres",
host = "192.168.1.179",
sslmode = "require")
)