Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Mã hóa mật khẩu trong R - để kết nối với Oracle DB bằng RODBC

CHỈNH SỬA:Chức năng dưới đây hiện đã có trong keyringr gói R của tôi. Gói keyringr cũng có các chức năng tương tự để truy cập Gnome Keyring và macOS Keychain.

---

Nếu bạn đang sử dụng Windows, bạn có thể sử dụng PowerShell để thực hiện việc này. Xem bài đăng trên blog của tôi bên dưới.

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

Về cơ bản ...

  1. Đảm bảo bạn đã bật thực thi PowerShell.

  2. Lưu văn bản sau vào một tệp có tên 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. Thực thi tập lệnh ở trên (nhấp chuột phải> Chạy với PowerShell), cung cấp tên có ý nghĩa cho mật khẩu và nhập mật khẩu. Bây giờ, bạn có thể xác minh rằng mật khẩu đã được mã hóa bằng cách kiểm tra tệp trong% USERPROFILE% / DPAPI / password / [PC NAME] / [PASSWORD IDENTIFIER.txt]

  4. Bây giờ, hãy chạy đoạn mã sau từ bên trong R (Tôi đã lưu hàm này trong một tập lệnh R mà tôi lấy nguồn ở đầu mỗi tập lệnh.

    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. Bây giờ, khi bạn cần cung cấp mật khẩu trong R, bạn có thể chạy lệnh sau thay vì mã hóa cứng / nhắc nhập mật khẩu:

    getEncryptedPassword("[PASSWORD IDENTIFIER]")
    

    Ví dụ:thay vì chạy lệnh ROracle:

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

    Thay vào đó, bạn có thể chạy phần mềm này (số nhận dạng tôi đã cung cấp ở Bước 3 là "MYUSER_MYDB":

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
    
  6. Bạn có thể lặp lại Bước 3 cho bao nhiêu mật khẩu theo yêu cầu và chỉ cần gọi chúng bằng số nhận dạng chính xác trong Bước 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. Tuyên bố Oracle

  2. Cách tạo bảng lồng nhau bằng kiểu dữ liệu do người dùng xác định trong cơ sở dữ liệu Oracle

  3. Hàm LOG () trong Oracle

  4. Truy vấn đệ quy SQL trên bảng tự tham chiếu (Oracle)

  5. Áp dụng chế độ Downtime và Hotpatch trong áp dụng R12.2