Как защитить имя пользователя и пароль базы данных с помощью R DBI? - PullRequest
0 голосов
/ 26 сентября 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Пакет 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.Я не знаю, насколько это безопасно на самом деле;для меня это достаточно хорошо, чтобы не иметь этого в открытом виде.

0 голосов
/ 26 сентября 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"), ...)
...