संपादित करें:नीचे दी गई कार्यक्षमता अब मेरे आर पैकेज कीरिंगर में उपलब्ध है। कीरिंगर पैकेज में जीनोम कीरिंग और मैकोज़ किचेन तक पहुंचने के समान कार्य हैं।
---पी>
यदि आप Windows का उपयोग कर रहे हैं तो आप ऐसा करने के लिए PowerShell का उपयोग कर सकते हैं। नीचे मेरा ब्लॉग पोस्ट देखें।
http://www.gilfillan.space/2016/04/21/Using-PowerShell-and-DPAPI-to-securely-mask-passwords-in-R-scripts/
अनिवार्य रूप से...
-
सुनिश्चित करें कि आपने पावरशेल निष्पादन सक्षम किया है।
-
निम्नलिखित पाठ को EncryptPassword.ps1 नामक फ़ाइल में सहेजें:
# Create directory user profile if it doesn't already exist. $passwordDir = "$($env:USERPROFILE)\DPAPI\passwords\$($env:computername)" New-Item -ItemType Directory -Force -Path $passwordDir # Prompt for password to encrypt $account = Read-Host "Please enter a label for the text to encrypt. This will be how you refer to the password in R. eg. MYDB_MYUSER $SecurePassword = Read-Host -AsSecureString "Enter password" | convertfrom-securestring | out-file "$($passwordDir)\$($account).txt" # Check output and press any key to exit Write-Host "Press any key to continue..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
-
उपरोक्त स्क्रिप्ट निष्पादित करें (राइट क्लिक> पावरशेल के साथ चलाएं), पासवर्ड के लिए एक सार्थक नाम प्रदान करें, और पासवर्ड टाइप करें। अब आप %USERPROFILE%/DPAPI/passwords/[PC NAME]/[PASSWORD IDENTIFIER.txt]
में फ़ाइल की जांच करके यह सत्यापित कर सकते हैं कि पासवर्ड एन्क्रिप्ट किया गया है। -
अब आर के भीतर से निम्नलिखित कोड चलाएं (मेरे पास यह फ़ंक्शन एक आर स्क्रिप्ट में सहेजा गया है जिसे मैं प्रत्येक स्क्रिप्ट की शुरुआत में स्रोत करता हूं।
getEncryptedPassword <- function(credential_label, credential_path) { # if path not supplied, use %USER_PROFILE%\DPAPI\passwords\computername\credential_label.txt as default if (missing(credential_path)) { credential_path <- paste(Sys.getenv("USERPROFILE"), '\\DPAPI\\passwords\\', Sys.info()["nodename"], '\\', credential_label, '.txt', sep="") } # construct command command <- paste('powershell -command "$PlainPassword = Get-Content ', credential_path, '; $SecurePassword = ConvertTo-SecureString $PlainPassword; $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword); $UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR); echo $UnsecurePassword"', sep='') # execute powershell and return command return(system(command, intern=TRUE)) }
-
अब जब आपको R में पासवर्ड की आपूर्ति करने की आवश्यकता होती है, तो आप पासवर्ड के लिए हार्डकोडिंग/प्रॉम्प्ट करने के बजाय निम्न कमांड चला सकते हैं:
getEncryptedPassword("[PASSWORD IDENTIFIER]")
उदाहरण के लिए, ROracle कमांड चलाने के बजाय:
dbConnect(driver, "MYUSER", "MY PASSWORD", dbname="MYDB")
आप इसके बजाय इसे चला सकते हैं (चरण 3 में मेरे द्वारा प्रदान किया गया पहचानकर्ता "MYUSER_MYDB" है:
dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
- आप जितने पासवर्ड की आवश्यकता है, उतने पासवर्ड के लिए चरण 3 को दोहरा सकते हैं, और बस चरण 5 में सही पहचानकर्ता के साथ उन्हें कॉल कर सकते हैं।