Как защитить имя пользователя и пароль базы данных с помощью R DBI?

При подключении к базе данных с помощью функции dbConnect в пакете DBI каковы наилучшие методы защиты информации для входа, такой как имя базы данных, имя пользователя и пароль?

Ввод информации для входа в систему в виде символьного текста, например

library(RPostgreSQL)
drv = dbDriver("PostgreSQL")
con = dbConnect(drv, dbname = "<DBNAME>", host = "<HOST>",
                port = 5432, user = "<USER>", password = "<PASSWORD>")

оставляет учетные данные открытыми и в виде обычного текста. Как можно защитить информацию для входа в систему при ее использовании в R-скрипте?


person ichbinallen    schedule 25.09.2018    source источник
comment
Вы смотрели пакет keyring?   -  person user2554330    schedule 26.09.2018
comment
Я не знаком. Есть ли mwe, которому я могу следовать?   -  person ichbinallen    schedule 26.09.2018
comment
Задав этот вопрос, я обнаружил, что в RStudio есть страница лучших практик для БД. использовать.   -  person ichbinallen    schedule 27.09.2018


Ответы (2)


Пакет keyring — это независимый от системы способ выполнения 6-го решения в страница, упомянутая JohnSG. Его преимущество перед другими методами заключается в том, что секретная информация никогда не сохраняется в открытом виде на вашем диске.

Метод предназначен для хранения паролей, но там можно хранить любую строку. Например,

library(keyring)
key_set("DBPassword", "ichbinallen")

что приведет к тому, что вам будет предложено ввести пароль для сохранения. Тогда ваш скрипт будет использовать

con = dbConnect(drv, dbname = "<DBNAME>", host = "<HOST>",
            port = 5432, user = "<USER>", 
            password = key_get("DBPassword", "ichbinallen"))

Также возможно хранить другие данные помимо отдельных строк, но я использовал именно так.

Он утверждает, что использует связку ключей в MacOS, хранилище учетных данных в Windows и API секретной службы в Linux. Я не знаю, насколько это безопасно; для меня это достаточно хорошо, чтобы не иметь его в ясности.

person user2554330    schedule 26.09.2018

Если вы не хотите устанавливать другой пакет, есть несколько вариантов, перечисленных здесь

Я предпочитаю использовать .Renviron, как описано в этом посте.

# ~/.Renviron
id = "my login name"
pw = "my password"

# script.R

# id and pw are defined in the script by virtue of .Rprofile
call_service(id = Sys.getenv("id"), pw = Sys.getenv("pw"), ...)
person JohnSG    schedule 26.09.2018