Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verschlüsseln Sie das Passwort in R, um mit RODBC eine Verbindung zu einer Oracle-Datenbank herzustellen

BEARBEITEN:Die folgende Funktionalität ist jetzt in meinem R-Paket keyringr verfügbar. Das keyringr-Paket hat auch ähnliche Funktionen, um auf den Gnome-Schlüsselbund und den macOS-Schlüsselbund zuzugreifen.

---

Wenn Sie Windows verwenden, können Sie dies mit PowerShell tun. Siehe meinen Blogbeitrag unten.

http://www.gilfillan.space/2016/04/21/Using-PowerShell-and-DPAPI-to-securely-mask-passwords-in-R-scripts/

Im Wesentlichen...

  1. Stellen Sie sicher, dass Sie die PowerShell-Ausführung aktiviert haben.

  2. Speichern Sie den folgenden Text in einer Datei namens 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")
    
  3. Führen Sie das obige Skript aus (Rechtsklick> Mit PowerShell ausführen), geben Sie einen aussagekräftigen Namen für das Passwort ein und geben Sie das Passwort ein. Sie können nun überprüfen, ob das Passwort verschlüsselt wurde, indem Sie die Datei in %USERPROFILE%/DPAPI/passwords/[PC NAME]/[PASSWORD IDENTIFIER.txt]

    überprüfen
  4. Führen Sie nun den folgenden Code in R aus (ich habe diese Funktion in einem R-Skript gespeichert, das ich am Anfang jedes Skripts beziehe.

    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))
    }
    
  5. Wenn Sie jetzt ein Passwort in R angeben müssen, können Sie den folgenden Befehl ausführen, anstatt das Passwort fest zu codieren/aufzufordern:

    getEncryptedPassword("[PASSWORD IDENTIFIER]")
    

    Anstatt beispielsweise den ROracle-Befehl auszuführen:

    dbConnect(driver, "MYUSER", "MY PASSWORD", dbname="MYDB")
    

    Sie können dies stattdessen ausführen (die Kennung, die ich in Schritt 3 angegeben habe, ist „MYUSER_MYDB“:

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
    
  6. Sie können Schritt 3 für beliebig viele Passwörter wiederholen und diese in Schritt 5 einfach mit der richtigen Kennung aufrufen.