Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Enkripsi kata sandi di R - untuk terhubung ke Oracle DB menggunakan RODBC

EDIT:Fungsionalitas di bawah ini sekarang tersedia di keyringr paket R saya. Paket keyringr juga memiliki fungsi serupa untuk mengakses Gnome Keyring dan macOS Keychain.

---

Jika Anda menggunakan Windows, Anda dapat menggunakan PowerShell untuk melakukan ini. Lihat posting blog saya di bawah ini.

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

Intinya...

  1. Pastikan Anda telah mengaktifkan eksekusi PowerShell.

  2. Simpan teks berikut ke dalam file bernama 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. Jalankan skrip di atas (klik kanan> Jalankan dengan PowerShell), berikan nama yang bermakna untuk kata sandi, dan ketik kata sandi. Sekarang Anda dapat memverifikasi bahwa kata sandi telah dienkripsi dengan memeriksa file di %USERPROFILE%/DPAPI/passwords/[NAMA PC]/[IDENTIFIER SANDI.txt]

  4. Sekarang jalankan kode berikut dari dalam R (Saya memiliki fungsi ini disimpan dalam skrip R yang saya sumber di awal setiap skrip.

    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. Sekarang ketika Anda perlu memberikan kata sandi di R, Anda dapat menjalankan perintah berikut alih-alih melakukan hardcoding / meminta kata sandi:

    getEncryptedPassword("[PASSWORD IDENTIFIER]")
    

    Misalnya, alih-alih menjalankan perintah ROracle:

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

    Anda dapat menjalankan ini sebagai gantinya (pengidentifikasi yang saya berikan pada Langkah 3 adalah "MYUSER_MYDB":

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
    
  6. Anda dapat mengulangi Langkah 3 untuk sandi sebanyak yang diperlukan, dan cukup panggil sandi dengan pengenal yang benar di Langkah 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. Tidak ada lagi SPU

  2. Di Oracle, apakah ada fungsi yang menghitung perbedaan antara dua Tanggal?

  3. Groovy SQL Oracle Array Fungsi/Prosedur Keluar Registrasi Parameter

  4. Data Kueri dari XML

  5. Bagaimana Cara Membuat Direktori di Oracle?