使用DBI
包中的dbConnect
函数连接到数据库时,保护登录信息(如数据库名称、用户名和密码(的最佳做法是什么?
以字符文本形式输入登录信息,例如
library(RPostgreSQL)
drv = dbDriver("PostgreSQL")
con = dbConnect(drv, dbname = "<DBNAME>", host = "<HOST>",
port = 5432, user = "<USER>", password = "<PASSWORD>")
使凭据保持打开状态,并以纯文本形式显示。 在 R 脚本中使用登录信息时,如何保护登录信息?
keyring
包是一种独立于系统的方式,用于执行 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上的Credential Store和Linux上的Secret Service API。 我不知道它实际上有多安全;对我来说,不把它看清楚就足够了。
如果您不想安装其他软件包,这里列出了许多选项
我的偏好是使用.伦维隆在那篇帖子中解释
# ~/.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"), ...)