sql >> Database teknologi >  >> RDS >> Oracle

Krypter adgangskode i R - for at oprette forbindelse til en Oracle DB ved hjælp af RODBC

EDIT:Nedenstående funktionalitet er nu tilgængelig i min R-pakke nøgleringr. Keyringr-pakken har også lignende funktioner til at få adgang til Gnome Keyring og macOS Keychain.

---

Hvis du bruger Windows, kan du bruge PowerShell til at gøre dette. Se mit blogindlæg nedenfor.

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

Grundlæggende...

  1. Sørg for, at du har aktiveret PowerShell-udførelse.

  2. Gem følgende tekst i en fil kaldet 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. Udfør scriptet ovenfor (højreklik> Kør med PowerShell), angiv et meningsfuldt navn til adgangskoden, og skriv adgangskoden. Du kan nu bekræfte, at adgangskoden er blevet krypteret ved at tjekke filen i %USERPROFILE%/DPAPI/passwords/[PC-NAVN]/[PASSWORD IDENTIFIER.txt]

  4. Kør nu følgende kode fra R (jeg har denne funktion gemt i et R-script, som jeg henter i starten af ​​hvert script.

    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. Når du nu skal angive en adgangskode i R, kan du køre følgende kommando i stedet for at indkode/bede om adgangskoden:

    getEncryptedPassword("[PASSWORD IDENTIFIER]")
    

    For eksempel, i stedet for at køre RORacle-kommandoen:

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

    Du kan køre dette i stedet (den identifikator, jeg angav i trin 3 er "MYUSER_MYDB":

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
    
  6. Du kan gentage trin 3 for så mange adgangskoder, som kræves, og blot kalde dem med den korrekte identifikator i trin 5.



  1. Hvordan kan jeg skrive SQL i Oracle i mit tilfælde?

  2. Sådan ændres sekunder til en tidsværdi i MySQL

  3. Hvordan IKKE RLIKE virker i MariaDB

  4. Skabelonmønstre og modifikatorer til formatering af dato/klokkeslæt i PostgreSQL