Написание функции-оболочки для подключения к базе данных PostgreSQL в R-пакете - PullRequest
0 голосов
/ 24 декабря 2018

Я пишу пакет R впервые.Он называется aactr и размещен на моем GitHub: https://github.com/jasonbaik94/aactr

. На данный момент пакет имеет только одну функцию: aact_connect:

aact_connect <- function(user, password) {

  drv <- DBI::dbDriver('PostgreSQL')
  con <- DBI::dbConnect(drv,
                   dbname="aact",
                   host="aact-db.ctti-clinicaltrials.org",
                   port=5432,
                   user=user,
                   password=password)

}

Меня беспокоит то, что пользователимой пакет не хотел бы вводить их имя пользователя и пароль в своем R-сценарии по соображениям конфиденциальности.

Каким будет хороший обходной путь для обеспечения конфиденциальности пользователей?

У меня возникла одна мысль: когда пользователь вводит aact_connect(), появляется окно, в котором пользователь может ввести username и password и нажать Enter, после чего будет установлено соединение.Кроме того, для тех, у кого нет имени пользователя или пароля, я бы добавил параметр init_connection = TRUE, после которого эта страница регистрации будет загружаться: https://aact.ctti -clinicaltrials.org / users / sign_up

Любые другие предложения приветствуются!

1 Ответ

0 голосов
/ 25 декабря 2018

Существует много способов безопасной обработки учетных данных базы данных в сценариях.См. Несколько примеров ниже:

  1. Используйте файлы конфигурации, такие как yaml, надежно сохраняет на компьютерах пользователей, чтобы R считывал нужные переменные.См. @ ответ Spacedman .

    config.yaml

    db:
     host : localhost
     port : 5432
     name : mypgdb
     user : pg_useR
     pwd  : ***
    

    R

    library(yaml)
    config = yaml.load_file("/path/to/config.yml")
    
    dbConnect(drv, host = config$db$host, port = config$db$port,
              dbname = config$db$name, 
              user = config$db$user, password = config$db$pwd)
    
  2. Используйте переменные среды, которые связаны с пользовательскими или системными профилями:

    db_creds <- Sys.getenv(c("DB_HOST", "DB_PORT", "DB_NAME", "DB_USER", "DB_PWD"))
    
    con <- DBI::dbConnect(drv,
                          dbname = db_creds[['DB_NAME']],
                          host = db_creds[['DB_HOST']],
                          port = db_creds[['DB_PORT,']],
                          user = db_creds[['DB_USER']],
                          password = db_creds[['DB_PWD']])
    
  3. Используйте DSN, которые поддерживают параметры соединения, но требуют соединения ODBC, которое может быть запущено собобщенный пакет odbc (часть того же семейства DBI, что и RPostgreSQL).Postgres поддерживает самые последние драйверы odbc для большинства операционных систем.См. R-блоггеров пост .

    odbc.ini

    [myPG_DSN]
    Driver = PostgreSQL Unicode
    Database = mypg_db
    Servername = localhost
    UserName = pg_useR
    Password = ***
    

    R

    db <- dbConnect(odbc::odbc(), "myPG_DSN")
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...