15

SOクォーラムがどうなるかはわかりませんが、質問自体は簡単です.Rからデータベースに接続するときに、データベース接続文字列のパスワードをどのように処理しますか?

チュートリアルでは、このような例がよく示されます。

con <- dbConnect(MySQL(), user="root", password="test", 
             dbname="research_db", host="localhost",
             client.flag=CLIENT_MULTI_STATEMENTS)

データベースが実際に実験的なローカルホストである場合、これはある程度現実的かもしれません。ただし、サーバー上の複数のユーザーで使用する場合、このように db 資格情報を公開したくない場合があります。特に、RStudio Server を SQL データベースと組み合わせる場合は、暗号化を行いたい場合があります。あなたの経験は何ですか?

4

4 に答える 4

12

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)

この場合、最後に非表示のパスワードを出力するだけですが、これを関数でラップしてその値を返し、それをパスワード引数の値として使用できます。または、これと connect 呼び出し (パスワードとして tclvalue 行を使用) を呼び出し内にlocal配置して、パスワードを含む変数が使用されるとすぐに消えるようにすることもできます。

編集

RStudio と RStudio サーバーには function があります.rs.askForPassword。次のように使用します。

psswd <- .rs.askForPassword("Database Password:")
con <- dbConnect(MySQL(), user="root", password=psswd, 
             dbname="research_db", host="localhost",
             client.flag=CLIENT_MULTI_STATEMENTS)
于 2012-10-23T15:49:57.113 に答える
7

同じ問題に対して別の解決策があります。これにより、ユーザーは接続するたびにパスワードを入力する必要がなくなります。.my.cnf ファイル機能を使用しています。基本的に、すべてのユーザーは、すべての MySQL データベースへのパスワードを含む RStudio Server ホーム ディレクトリのルートに .my.cnf ファイルを持っているため、R スクリプトでは「グループ」機能を介してデータベースを参照するだけです。

R スクリプト:

library("RMySQL")
m <- dbDriver("MySQL")
# connect using .my.cnf
con <- dbConnect(m, group = "theDatabase")

.my.cnf ファイル:

[client]
user = userName
host = mysql.server.com
password = MyPassword
[theDatabase]
database = hr
[theDatabase2]
user = opto
database = opto
password = pure-light
host = merced
于 2013-02-26T22:00:11.420 に答える