sql >> Database >  >> RDS >> Oracle

Versleutel wachtwoord in R - om verbinding te maken met een Oracle DB met behulp van RODBC

EDIT:De onderstaande functionaliteit is nu beschikbaar in mijn R-pakket keyringr. Het keyringr-pakket heeft ook vergelijkbare functies om toegang te krijgen tot de Gnome-sleutelhanger en macOS-sleutelhanger.

---

Als u Windows gebruikt, kunt u hiervoor PowerShell gebruiken. Zie mijn blogpost hieronder.

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

In wezen...

  1. Zorg ervoor dat u PowerShell-uitvoering hebt ingeschakeld.

  2. Sla de volgende tekst op in een bestand met de naam 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. Voer het bovenstaande script uit (klik met de rechtermuisknop> Uitvoeren met PowerShell), geef een betekenisvolle naam op voor het wachtwoord en typ het wachtwoord. U kunt nu controleren of het wachtwoord is versleuteld door het bestand te controleren in %USERPROFILE%/DPAPI/passwords/[PC NAME]/[PASSWORD IDENTIFIER.txt]

  4. Voer nu de volgende code uit vanuit R (ik heb deze functie opgeslagen in een R-script dat ik aan het begin van elk script source.

    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. Als u nu een wachtwoord in R moet invoeren, kunt u de volgende opdracht uitvoeren in plaats van hardcoderen / vragen om het wachtwoord:

    getEncryptedPassword("[PASSWORD IDENTIFIER]")
    

    Bijvoorbeeld, in plaats van het ROracle commando uit te voeren:

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

    U kunt dit in plaats daarvan uitvoeren (de identifier die ik in stap 3 heb opgegeven is "MYUSER_MYDB":

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
    
  6. U kunt stap 3 herhalen voor zoveel wachtwoorden als nodig is, en ze gewoon aanroepen met de juiste identifier in stap 5.



  1. 5 fouten bij het ontwerpen van databases die u moet vermijden

  2. fout bij het installeren van psycopg2, bibliotheek niet gevonden voor -lssl

  3. Maak verbinding met mysql in een docker-container van de host

  4. ORA-00904 Ongeldige identifier” voor een identifier in een group by-clausule