sql >> データベース >  >> RDS >> Oracle

Rでパスワードを暗号化-RODBCを使用してOracleDBに接続します

    編集:以下の機能が私のRパッケージキーリンガーで利用できるようになりました。キーリングパッケージには、GnomeキーリングとmacOSキーチェーンにアクセスするための同様の機能もあります。

    ---

    Windowsを使用している場合は、PowerShellを使用してこれを行うことができます。以下の私のブログ投稿を参照してください。

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

    基本的に...

    1. PowerShellの実行が有効になっていることを確認してください。

    2. 次のテキストを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. 上記のスクリプトを実行し(右クリック> PowerShellで実行)、パスワードに意味のある名前を付けて、パスワードを入力します。これで、%USERPROFILE%/ DPAPI / passwords / [PC NAME] / [PASSWORD IDENTIFIER.txt]

      のファイルをチェックして、パスワードが暗号化されていることを確認できます。
    4. 次に、R内から次のコードを実行します(この関数は、各スクリプトの開始時に取得するRスクリプトに保存されています。

      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. これで、Rでパスワードを指定する必要がある場合、ハードコーディング/パスワードの入力を求める代わりに、次のコマンドを実行できます。

      getEncryptedPassword("[PASSWORD IDENTIFIER]")
      

      たとえば、ROracleコマンドを実行する代わりに:

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

      代わりにこれを実行できます(手順3で指定した識別子は「MYUSER_MYDB」です:

      dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
      
    6. 必要な数のパスワードに対して手順3を繰り返し、手順5で正しい識別子を使用してパスワードを呼び出すことができます。



    1. PostgreSQLデータをリモートサイトに複製する方法

    2. JSON_OBJECT()–MySQLのキー/値ペアのリストからJSONオブジェクトを作成します

    3. 複数の結合を行う場合のtmpテーブルのMySQLの誤ったキーファイル

    4. SQL Server 2016:常に暗号化されることによるパフォーマンスへの影響