Подключитесь к Postgres через SSL, используя R
У меня есть тот же вопрос, который был задан здесь Подключиться к Redshift через SSL с помощью R
Однако данный ответ требует подтверждения сертификата. Мне интересно, есть ли способ сделать это без проверки сертификата? Когда я подключаюсь через клиент sql, я просто добавляю это
?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
Как я могу добавить эти параметры в R?
Заранее благодарю за любую помощь!
2 ответа
Вместо прохождения verify-full
в sslmode
, пытаться require
или же allow
:
dbConnect(dbDriver('PostgreSQL'),
dbname = 'dbname=foobar sslmode=require',
host = 'foobar.redshift.amazonaws.com',
port = 5439,
user = 'foobar',
password = 'foobar')
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)
Это сработало для меня:
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)
Таким образом, ключевые слова параметра можно передавать в виде списка. Это также работало для RPostgres 1.1.1 и 1.2.0.
Я полагаюсь на пакеты R DBI и odbc. Вот настройка, которую я использовал с помощью @ Floris
- Сначала создайте сертификат и ключ SSL клиента, подпишите сертификат клиента с помощью корневого сертификата сервера postgres, а также сохраните корневой сертификат сервера postgres на стороне клиента в
~/.postgresql/
. Ключ ssl клиента принадлежит только владельцу и доступен только для чтения. Вот руководство от jealastic.com, которому я следовал, чтобы создать сертификаты SSL сервера и клиента.
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
где драйвер odbc был установлен в среде conda с использованием
conda create --name sql -c conda-forge psqlodbc
.
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 либо создайте новое соединение, и оно должно показать запись foodb из ~/.odbc.ini, либо введите это в консоль R.
library(odbc)
foodb <- dbConnect(odbc::odbc(), "foodb", timeout = 10)
Готово!