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()到文件不起作用,因为连接已超时。但是,从我的用户目录中下载source一个文件,其中包含.R

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

确实有效。

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

4

1 回答 1

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 脚本中使用该参数列表。

于 2011-09-05T14:27:30.690 回答