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

7
我正在使用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")

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

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

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

有没有更安全的方法来设置dbConnect()语句?

更新

dbConnect()输出保存到文件中不起作用,因为连接已超时。然而,从我的用户目录中的.R文件中source可以实现连接。

library(RMySQL)
con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")

这种方法确实可行。

然而,我不知道这种方法的安全性如何。

1个回答

2

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

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

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

load('/nonpub/con.details')
con <- do.call(dbConnect, con.details)

由于您正在使用rApache,因此在每次运行时加载con.details是没有意义的。我建议将该行代码放入REvalOnStartup中,这也可以避免save/load问题。
因此,我建议在rApache启动时添加library(RMySQL); con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")并在brew脚本中使用该参数列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接