Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zaszyfruj hasło w R - aby połączyć się z bazą danych Oracle za pomocą RODBC

EDYCJA:Poniższa funkcjonalność jest teraz dostępna w moim pęku kluczy pakietu R. Pakiet keyringr ma również podobne funkcje, aby uzyskać dostęp do pęku kluczy Gnome i pęku kluczy macOS.

---

Jeśli używasz systemu Windows, możesz to zrobić za pomocą PowerShell. Zobacz mój post na blogu poniżej.

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

Zasadniczo...

  1. Upewnij się, że włączyłeś wykonywanie PowerShell.

  2. Zapisz następujący tekst w pliku o nazwie 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. Uruchom powyższy skrypt (kliknij prawym przyciskiem myszy> Uruchom z PowerShell), podaj znaczącą nazwę hasła i wpisz hasło. Możesz teraz sprawdzić, czy hasło zostało zaszyfrowane, sprawdzając plik w %USERPROFILE%/DPAPI/passwords/[NAZWA KOMPUTERA]/[PASSWORD IDENTIFIER.txt]

  4. Teraz uruchom następujący kod z poziomu języka R (mam tę funkcję zapisaną w skrypcie R, który pozyskuję na początku każdego skryptu.

    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. Teraz, gdy musisz podać hasło w R, możesz uruchomić następujące polecenie zamiast kodowania / pytania o hasło:

    getEncryptedPassword("[PASSWORD IDENTIFIER]")
    

    Na przykład, zamiast uruchamiać polecenie ROracle:

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

    Zamiast tego możesz to uruchomić (identyfikator, który podałem w kroku 3 to „MYUSER_MYDB”:

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
    
  6. Możesz powtórzyć krok 3 dla tylu haseł, ile jest wymaganych, i po prostu wywołaj je z poprawnym identyfikatorem w kroku 5.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przykład funkcji potokowej Oracle

  2. Pełne zrozumienie PDO ATTR_PERSISTENT

  3. Jak wybrać i zoptymalizować indeksy oracle?

  4. Zapytanie o kilka NEXTVAL z sekwencji w jednej instrukcji

  5. Jak utworzyć użytkownika w Oracle i przypisać uprawnienia