【问题标题】:How to secure database username and password with R DBI?如何使用 R DBI 保护数据库用户名和密码?
【发布时间】:2018-09-25 23:28:44
【问题描述】:

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

以字符文本形式输入登录信息,例如

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

使凭据保持打开状态并以纯文本形式显示。在 R 脚本中使用时如何保护登录信息?

【问题讨论】:

  • 你看过keyring包吗?
  • 我不熟悉。有什么我可以关注的吗?
  • 自从提出这个问题后,我发现 RStudio 有一个best practices page 供 DB 使用。

标签: r security r-dbi rpostgresql


【解决方案1】:

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 上使用 Keychain,在 Windows 上使用 Credential Store,在 Linux 上使用 Secret Service API。我不知道它实际上有多安全。对我来说,不把它搞清楚就足够了。

【讨论】:

    【解决方案2】:

    如果您不想安装其他软件包,列出了许多选项here

    我的偏好是使用 .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"), ...)
    

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 2011-06-20
      • 2016-10-03
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多