如何使用 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。我不知道它实际上有多安全;对我来说这已经足够好了。
当使用 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。我不知道它实际上有多安全;对我来说这已经足够好了。