我正在使用rapache和brew开发一个Web应用程序。在R代码中,我想使用RMySQL包来查询MySQL数据库,但我在质疑从R脚本中访问数据库登录详细信息的最佳方法。
关注some suggestions for a similar problem with 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()
输出保存到文件不起作用,因为连接已超时。但是,source
我的用户目录中包含<{p}}的.R
文件
library(RMySQL)
con <- dbConnect(MySQL(), dbname = "mydb", user = "myuser", pass = "mypass")
确实有效。
但是,我不知道这种做法有多安全。
答案 0 :(得分:2)
虽然我不明白为什么与R脚本文件中的用户名/密码相比,您的建议会提高安全性,但您可以存储dbConnect
功能的参数。例如:
con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")
save(con.details, file='/nonpub/con.details')
在brew文件中使用这些参数:
load('/nonpub/con.details')
con <- do.call(dbConnect, con.details)
当您使用rApache时,在每次运行中加载con.details
都没有任何意义,我宁愿将该行放在REvalOnStartup
中,这也可以为您节省save/load
个问题:)
所以我建议将library(RMySQL); con.details <- list("MySQL", dbname = "mydb", user = "myuser", pass = "mypass")
添加到rApache启动中,并在brew脚本中使用该参数列表。