使用R通过SSL连接到Postgres

时间:2015-06-22 20:30:44

标签: r postgresql ssl

我有同样的问题Connect to Redshift via SSL using R

但是,给出的答案需要证书验证。我想知道在没有证书验证的情况下是否有办法做到这一点?当我通过SQL客户端连接时,我只需添加此

$docx->replacePlaceholderImage('logo','tmp/'.$filename);

如何在R?

中添加这些参数

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

不要将verify-full传递给sslmode,而是尝试requireallow

dbConnect(dbDriver('PostgreSQL'),
    dbname   = 'dbname=foobar sslmode=require',
    host     = 'foobar.redshift.amazonaws.com',
    port     = 5439,
    user     = 'foobar',
    password = 'foobar')

答案 1 :(得分:4)

https://github.com/r-dbi/RPostgres在这一点上似乎是更现代,更维护的软件包。这就是对我有用的...

install.packages("RPostgres")
require(RPostgres)

db = dbConnect(
  Postgres(), 
  user = 'user',
  password = 'password',
  dbname = 'dbname',
  host = 'host',
  port = port,
  sslmode = 'require'
)

dbListTables(db)

答案 2 :(得分:0)

我依靠R DBI和odbc软件包。这是我在@ Floris

的帮助下使用的设置
  • 首先,创建客户端SSL证书和密钥,使用postgres服务器根证书对客户端证书进行签名,并将Postgres服务器根证书保留在客户端的~/.postgresql/上。客户端ssl密钥是所有者拥有的,并且仅由所有者只读。这是我创建服务器和客户端SSL证书所遵循的a guide from jealastic.com

ls -alh ~/.postgresql/

drwx------  2 foo staff      122 Jul 23 10:45 ./
drwx------ 54 foo staff 2.1K Jul 23 10:45 ../
-rw-r--r--  1 foo staff      875 Jul 21 17:42 postgresql.crt
-rw-r--r--  1 foo staff      631 Jul 21 17:41 postgresql.csr
-r--------  1 foo staff      891 Jul 21 17:41 postgresql.key
-rw-r--r--  1 foo staff     1.1K Jul 21 17:40 root.crt
  • nano ~/.odbcinst.ini并添加以下内容:
[PostgreSQL Driver]
Driver              = /home/foo/anaconda3/envs/sql/lib/psqlodbcw.so
  

使用conda create --name sql -c conda-forge psqlodbc在conda env中安装了odbc驱动程序的地方。

  • nano ~/.odbc.ini并为要使用有效凭据连接的数据库添加一个或多个条目:
[foodb]
Driver              = PostgreSQL Driver
Database            = foodb
Servername          = db.example.com
UserName            = foo
Password            = mypassword
Port                = 5432
sslmode             = require
  

请注意, PostgreSQL驱动程序与〜/ .odbcinst.ini中的相应条目匹配   要了解 sslmode 的类型与安全性和开销之间的关系,请阅读以下内容:https://www.postgresql.org/docs/9.4/libpq-ssl.html

  • 修复权限
chmod 600 ~/.odbc.ini ~/.odbcinst.ini
  • 在RStudio GUI中,创建一个新连接,它应该显示〜/ .odbc.ini中的条目 foodb 或在R控制台中键入该条目。
library(odbc)
foodb <- dbConnect(odbc::odbc(), "foodb", timeout = 10)

完成!

答案 3 :(得分:0)

这对我有用:

connection <- DBI::dbConnect(RPostgres::Postgres(),
                             dbname = "dbname",
                             host = "host",
                             port = "port",
                             password = "password",
                             user = "user_name",
                             base::list(sslmode="require", connect_timeout="10"),
                             service = NULL)

因此parameter key words可以作为列表传递。 这也适用于RPostgres 1.1.1和1.2.0。