linux - 使用 JDBC/ODBC 驱动程序将 R 与数据库连接时保护用户凭据

标签 linux r security unix rstudio

通常我使用 R 使用 JDBC/ODBC 驱动程序连接到数据库。一个典型的代码看起来像

library(RJDBC)
vDriver = JDBC(driverClass="com.vertica.jdbc.Driver", classPath="/home/Drivers/vertica-jdbc-7.0.1-0.jar")
vertica = dbConnect(vDriver, "jdbc:vertica://servername:5433/db", "username", "password")

我希望其他人使用我的凭据访问数据库,但我想保护我的用户名和密码。因此,我计划将上述脚本保存为“Connections.r”文件,并要求用户获取该文件。

source("/opt/mount1/Connections.r")

如果我只授予 Connections.r 执行权限,其他人将无法获取该文件

chmod 710 Connections.r

只有在我授予读取和执行权限时,R 才允许用户获取它。如果我授予读取权限,我的凭据将被公开。无论如何我们可以通过保护用户凭证来解决这个问题吗?

最佳答案

除非您要通过创建一个 Rcpp 函数或包来深度混淆您的凭据来执行初始 JDBC 连接(这不会是微不足道的),否则您唯一较轻的混淆机制之一是将您的凭据存储在一个文件中并让您的sourced R 脚本从文件中读取它们,在调用中使用它们,并在调用后立即从环境中 rm 它们。这仍然会暴露他们,但不是直接暴露。

另一种方式,因为用户有自己的 RStudio Server 登录名,是使用 Hadley 的新 secure包(我们中的一些安全人员正在按照它的步伐运行它),添加用户 key 并加密存储您的凭据,但让您的源 R 脚本自动解密它们。您仍然需要对您使用的任何变量执行 rm,因为如果您不这样做,它们将成为环境的一部分。

最后一种方法,因为您无论如何都让他们访问数据,所以是使用一组单独的凭据(您表达问题的方式似乎是在使用您的凭据this) 只对这些分析所需的数据库和表以只读模式工作。这样一来,信用是否泄露并不重要,因为没有什么可以用它们做的“坏事”。

最后,我很困惑为什么你不能只在数据库端设置用户只读权限?这就是基于角色的访问控制的目的。这是行政工作,但绝对是正确的做法。

关于linux - 使用 JDBC/ODBC 驱动程序将 R 与数据库连接时保护用户凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266742/

相关文章:

r - 使用 formatstyle datatable r 时出错

python - 无法在 Raspberry Pi 启动时执行 python 脚本

r - 将 x Axis 放置在具有负 y 值的条形图顶部

r - 双向条形图中的类别顺序

ruby-on-rails - Rails - 每个子域单独的数据库

javascript - 从前端到后端签署 api 调用

linux - 在 linux 中有 2 个阻塞脚本相互交互

linux - DB2 强制应用程序无法终止加载作业

php - 创建符号链接(symbolic link)以访问 linux 中的目录

php - 安全上传文件