Mat*_*ert 14 sql passwords r rstudio-server
虽然我不知道SO法定人数会是什么,但问题本身很简单:当你从R连接数据库时,你们如何处理数据库连接字符串中的密码?
教程经常会显示这样的例子.
con <- dbConnect(MySQL(), user="root", password="test",
dbname="research_db", host="localhost",
client.flag=CLIENT_MULTI_STATEMENTS)
Run Code Online (Sandbox Code Playgroud)
如果数据库确实是您的实验性本地主机,这可能有些现实.但是,如果将其与服务器上的多个用户一起使用,则可能不希望像这样公开db凭据.特别是在将RStudio Server与SQL数据库结合使用时,您可能希望执行加密操作.你有什么经历?
Gre*_*now 10
下面是一段示例代码,它使用tcltk包来提示输入密码,同时隐藏实际值:
library(tcltk)
tt <- tktoplevel()
pass <- tclVar()
tkpack(tklabel(tt,text='Password:'))
tkpack(tkentry(tt,textvariable=pass,show='*'))
tkpack(tkbutton(tt,text="Done",command=function()tkdestroy(tt)))
tkwait.window(tt)
tclvalue(pass)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它只是在最后打印出未隐藏的密码,但您可以将其包装在函数中以返回该值,然后将其用作密码参数的值.或者您可以将此调用和连接调用(使用tclvalue行作为密码)放入调用中,local以便包含密码的变量在使用后立即消失.
编辑
对于RStudio和RStudio服务器,有一个功能.rs.askForPassword.使用它像:
psswd <- .rs.askForPassword("Database Password:")
con <- dbConnect(MySQL(), user="root", password=psswd,
dbname="research_db", host="localhost",
client.flag=CLIENT_MULTI_STATEMENTS)
Run Code Online (Sandbox Code Playgroud)
所以我喜欢使用配置文件的解决方案 - 这是一个很好的答案.密码提示答案也有一些很好的评论,这使我得到了这个解决方案:
conn <- dbConnect(drv, "jdbc:sqlserver://host:port", 'username', password=.rs.askForPassword("Enter password:"))
Run Code Online (Sandbox Code Playgroud)
我对同一个问题有不同的解决方案,每次连接时都不需要用户输入密码.我正在使用.my.cnf文件功能.基本上每个用户在其RStudio Server主目录的根目录中都有一个.my.cnf文件,其中包含所有MySQL数据库的密码,因此在R脚本中我只是通过"组"功能引用数据库.
R脚本:
library("RMySQL")
m <- dbDriver("MySQL")
# connect using .my.cnf
con <- dbConnect(m, group = "theDatabase")
Run Code Online (Sandbox Code Playgroud)
.my.cnf文件:
[client]
user = userName
host = mysql.server.com
password = MyPassword
[theDatabase]
database = hr
[theDatabase2]
user = opto
database = opto
password = pure-light
host = merced
Run Code Online (Sandbox Code Playgroud)