R 如何在HTTP请求中建立数据库连接

R 如何在HTTP请求中建立数据库连接,r,plumber,R,Plumber,我正在尝试构建一个HTTPAPI(使用R/plumber)。我想要的一个特性是用户发出GET请求,然后根据他们想要数据的因素返回一些数据。但是,查询数据需要构建odbc数据库连接,然后提交查询,并将结果作为JSON对象返回 目前,我有一个函数,如: #* @param username #* @param password #* @param factors #* @get /data function(username, password, factors){ # build databa

我正在尝试构建一个HTTPAPI(使用R/plumber)。我想要的一个特性是用户发出GET请求,然后根据他们想要数据的因素返回一些数据。但是,查询数据需要构建odbc数据库连接,然后提交查询,并将结果作为JSON对象返回

目前,我有一个函数,如:

#* @param username
#* @param password
#* @param factors
#* @get /data
function(username, password, factors){
  # build database connection
  # query data
  # return results
}
这将使用HTTPS,但我仍然担心这是不安全的(尽管API将只托管在内部服务器上,所以我认为总体上安全性问题不大)。有更好的方法吗?目前我没有更好的方法来验证用户身份-我需要传入用户/密码组合,以使用不同的R函数建立数据库连接,然后我可以访问数据库中的数据。我可能能够获得一个系统数据库帐户,只需从配置文件中存储用户名/密码,然后从系统环境变量中获取用户ID,但这需要浏览我的公司:(


我现在做的还可以吗?或者你会建议使用不同的路径吗?

使用内部RStudio Connect服务器进行部署顺便说一句。(1)DB user/pass:我建议使用env VAR作为用户名和密码,如建议的(除其他外)一旦你
rsconnect::deployApp
你的管道工应用程序,进入RSC界面并设置环境变量,一切都很好。而且肯定比在代码中添加这些内容更安全(更灵活)对于您的用户身份验证,我强烈建议不要在应用程序中处理user/pass:它会在日志中泄漏,并且有点可嗅探。请使用RSC的安全性(ldap、saml、pam),并要求所有用户都经过身份验证。(3)根据预期的连接频率,您可以选择在每次调用函数时连接/查询/断开连接,这可能会给每个HTTPS连接增加一点开销;或者您可以使用
(使用
odbc
)在您的功能之外,以便以持久的方式控制和维护连接池您还没有谈到如何构造/控制
factors
;小心无意或恶意的sql注入,确保您绑定了用户提供的值,而不是将它们插入查询字符串。我将尝试获取一个自定义db帐户,我们可以使用它来设置变量,但可能不可能。您将从中受益从拥有“服务”帐户(只读)开始,无论您如何存储用户名和密码。由于您将应用部署到RSC,因此无法使用某些安全密码存储机制(例如,windows凭据、macos密钥链、linux密钥环和R的
密钥环
软件包);
config
包允许您不将用户/密码放入源代码中,但它确实将其放入一个文本文件中,可能是可读的。Env vars是最后一个选项,据称它安全地存储在RSC中,因此……无论您使用的是哪个db用户,您都是最佳选项。