如何让rapache/brew安全地连接到MySQL数据库?

kmm*_*kmm 7 r rapache rmysql

我正在使用rapache和brew开发一个Web应用程序.在R代码中,我想使用RMySQL包来查询MySQL数据库,但我在质疑从R脚本中访问数据库登录详细信息的最佳方法.

根据PHP的类似问题的一些建议,一个想法是在交互式会话中执行以下操作以将连接详细信息保存到以下文件之外/var/www:

con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")
save(con, file = "/home/myuser/sqlconnect.rda")
Run Code Online (Sandbox Code Playgroud)

然后在由rapache/brew运行的脚本中,加载.rda文件:

<%
load("/home/myuser/sqlconnect.rda")
query <- "MY QUERY"
result <- dbGetQuery(con, query)
%>
Run Code Online (Sandbox Code Playgroud)

我还没有尝试过这种方法.我甚至不确定我的sqlconnect.rda文件是否包含连接所需的所有信息.

是否有更安全的方式来设置dbConnect()声明?

更新

dbConnect()输出保存到文件不起作用,因为连接已超时.但是,从我的用户目录中包含source一个.R文件

library(RMySQL)
con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")
Run Code Online (Sandbox Code Playgroud)

确实有效.

但是,我不知道这种方法有多安全.

dar*_*zig 2

虽然我不明白为什么与在 R 脚本文件中包含用户名/密码相比,您的建议会提高安全性,但您可以存储函数的参数dbConnect。例子:

con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")
save(con.details, file='/nonpub/con.details')
Run Code Online (Sandbox Code Playgroud)

并在您的brew文件中使用这些参数:

load('/nonpub/con.details')
con <- do.call(dbConnect, con.details)
Run Code Online (Sandbox Code Playgroud)

当您使用 rApache 时,con.details每次运行时加载没有任何意义,我宁愿将该行放在 中REvalOnStartup,这也可以为您节省这个save/load问题:)

所以我建议添加library(RMySQL); con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")到 rApache 启动并在brew 脚本中使用该参数列表。