我正在尝试使用ssl = verify ca
模式连接到远程Postgres数据库.我的问题似乎是相似的连接,使用R通过SSL进行红移和通过,使用R SSL连接到Postgres的,但他们没有正常工作.始终是错误
Error in postgresqlNewConnection(drv, ...) :
RS-DBI driver: (could not connect (null)@datadb1 on dbname "(null)"
我的代码是这样的
library("RPostgreSQL")
host = 'datadb1'
dbname = 'test'
port = 5432
password = pw
username = 'pep'
pg_dsn = paste0(
'dbname=', dbname, ' ',
'sslrootcert=', "C://root-ca.crt", ' ',
"sslkey=C://pep.key", " ",
"sslcert=C://pep.crt",
'sslmode=verify-ca'
)
dbConnect(RPostgreSQL::PostgreSQL(), dbname=pg_dsn, host=host,
port=port, password=password, user=username)
Run Code Online (Sandbox Code Playgroud)
这不是一般的数据库问题,因为我能够使用Python连接到数据库. 更新:我在指定路径时犯了一个错误; 错误实际上是这样的:
Error in postgresqlNewConnection(drv, ...) : RS-DBI driver: (could not connect pep@datadb1 on dbname "test")
Run Code Online (Sandbox Code Playgroud)
根据错误消息,问题是您正在为用户名和数据库名称传递空值.这表明您的实际代码与您在此处输入的内容不符.我会编写一个10行的Rscript程序,它只是连接并抓取一些数据,如下所示:
#!/usr/bin/Rscript
library("RPostgreSQL")
host = '192.168.36.2'
dbname = 'test'
port = 5432
password = 'secret'
username = 'pep'
pg_dsn = paste(
'dbname=', dbname, ' ',
'sslrootcert=', 'rootCA.pem', ' ',
'sslkey=pem.key', ' ',
'sslcert=pem.crt', ' ',
'sslmode=verify-ca',
sep=""
)
conn <- dbConnect(RPostgreSQL::PostgreSQL(), dbname=pg_dsn, host=host,
port=port, password=password, user=username)
rs <- dbSendQuery(conn, statement="SELECT COUNT(*) FROM users")
data <- fetch(rs, n=1)
dim(data)
Run Code Online (Sandbox Code Playgroud)
所以我认为这根本不与SSL证书相关,而是你的变量没有像你想象的那样设置.
编辑:我创建了自己的CA并用它来签署服务器证书和客户端证书.我将Postgres 9.3放在一个新的虚拟机上,并且连接正常,双方都需要证书.我可以连接psql和R.所以我担心我无法重现你的问题.但是你的代码中有些东西看起来很可疑:
你之前需要一个空间sslmode
,像这样:
'sslcert=pem.crt', ' ',
Run Code Online (Sandbox Code Playgroud)
不是这个:
'sslcert=pem.crt',
Run Code Online (Sandbox Code Playgroud)这些更改中的任何一个都可以解决您的问
归档时间: |
|
查看次数: |
2007 次 |
最近记录: |