Oracle
 sql >> Base de données >  >> RDS >> Oracle

Crypter le mot de passe dans R - pour se connecter à une base de données Oracle à l'aide de RODBC

EDIT :La fonctionnalité ci-dessous est maintenant disponible dans mon trousseau de clés R. Le package keyringr a également des fonctions similaires pour accéder au trousseau de clés Gnome et au trousseau de clés macOS.

---

Si vous utilisez Windows, vous pouvez utiliser PowerShell pour le faire. Voir mon article de blog ci-dessous.

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

Essentiellement...

  1. Assurez-vous d'avoir activé l'exécution de PowerShell.

  2. Enregistrez le texte suivant dans un fichier appelé 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. Exécutez le script ci-dessus (clic droit> Exécuter avec PowerShell), fournissez un nom significatif pour le mot de passe et saisissez le mot de passe. Vous pouvez maintenant vérifier que le mot de passe a été chiffré en vérifiant le fichier dans %USERPROFILE%/DPAPI/passwords/[PC NAME]/[PASSWORD IDENTIFIER.txt]

  4. Exécutez maintenant le code suivant à partir de R (j'ai cette fonction enregistrée dans un script R que je source au début de chaque 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. Désormais, lorsque vous devez fournir un mot de passe dans R, vous pouvez exécuter la commande suivante au lieu de coder en dur/demander le mot de passe :

    getEncryptedPassword("[PASSWORD IDENTIFIER]")
    

    Par exemple, au lieu d'exécuter la commande ROracle :

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

    Vous pouvez exécuter ceci à la place (l'identifiant que j'ai fourni à l'étape 3 est "MYUSER_MYDB":

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
    
  6. Vous pouvez répéter l'étape 3 pour autant de mots de passe que nécessaire et les appeler simplement avec l'identifiant correct à l'étape 5.