如何使用 R DBI 保护数据库用户名和密码?

How to secure database username and password with R DBI?

当使用 DBI 包中的 dbConnect 函数连接到数据库时,保护登录信息(例如数据库名称、用户名和密码)的最佳做法是什么?

将登录信息作为字符文本输入,例如

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

以纯文本形式打开凭据。在R脚本中使用登录信息如何保护?

如果您不想安装另一个包,这里列出了一些选项here

我的偏好是使用 .Renviron,如 post

中所述
# ~/.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"), ...)

keyring 包是一种独立于系统的方法来执行 page mentioned by JohnSG 中的第 6 个解决方案。与其他方法相比,它的优势在于秘密信息永远不会以明文形式存储在您的磁盘上。

该方法专为存储密码而设计,但可以存储任何字符串。例如,

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

这将提示您输入要存储的密码。那么你的脚本将使用

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

除了单个字符串之外,还可以存储其他数据,但这就是我使用它的方式。

它声称在 MacOS 上使用钥匙串,在 Windows 上使用凭据存储,在 Linux 上使用特勤局 API。我不知道它实际上有多安全;对我来说这已经足够好了。