web-dev-qa-db-ja.com

DBeaver接続に保存されているDBパスワードを回復する

開発者インスタンスのパスワードを忘れました(無責任..はい、作業中です)。パスワードを使用してDBeaverに接続を保存しました。私はまだその接続を使用して接続できます。 DBeaverはプレーンテキストで表示しません。とにかくパスワードを取得できますか?パスワードのリセットをDBAに依頼するのが最後の手段です。貼り付けをメモ帳にコピーしようとしましたが、コピーは明らかに無効になっています。

38
Git_gal

最近、この問題に直面しました。次の手順に従います(私のDBeaverバージョンは3.5.8で、Mac OSX El Capitanにありました)

  1. DBeaverが接続の詳細を保存するファイルを見つけます。私にとっては、この場所にありました~/.dbeaver/General/.dbeaver-data-sources.xml。このファイルは非表示になっていますので、探す際にはこの点に留意してください。
  2. そのファイルで関心のあるデータソース定義ノードを見つけます。
  3. パスワードを復号化します:残念ながら、パスワードを除くすべてがプレーンテキストです。パスワードは何らかの暗号化された形式です。この tool を使用してプレーンテキストに復号化します。

または

パスワードを復号化するDBeaverのメソッドのコアをコピーすることにより、迅速で汚れた Javaプログラム を作成しました。暗号化されたパスワード文字列を取得したら、このプログラムを実行するだけで、パスワードがプレーンテキストに変換されて印刷されます。

実行方法

行番号13では、OwEKLE4jpQ==暗号化されたパスワードを.dbeaver-data-sources.xml興味のあるデータソースのファイル。コンパイルして実行すると、プレーンテキストのパスワードが出力されます。

https://github.com/jaisonpjohn/dbeaver-password-retriever/blob/master/SimpleStringEncrypter.Java

編集

どうやら、これは「人気」の間違いです。そのため、上記のコードでAWSラムダ関数をデプロイしました。あなた自身の責任でこれを使用してください、あなたは私があなたのパスワードを記録しているかどうかは決してわかりません:D

curl https://lmqm83ysii.execute-api.us-west-2.amazonaws.com/prod/dbeaver-password-decrypter \
-X POST --data "OwEKLE4jpQ=="

編集2

さらに良いことに、UIがあります http://dbeaver-password-decrypter.s3-website-us-west-2.amazonaws.com/ 。これは言うまでもなく、あなた自身の責任でこれを使用してください。非Httpsはあなたの心配の少なくともです! :)

111
so-random-dude

パッケージ宣言がある場合は、javac -dをコンパイルするだけです。 SimpleStringEncrypter.Javaは、それを現在のディレクトリの下の正しいディレクトリ構造に配置します。その後、Java -cp。packagename.SimpleStringEncrypterを実行すると実行されます。基本的なJava。

とにかく、このプログラムは素晴らしく、私にとって多くの時間を節約しました。

2
kedar

DBeaver 6.1.3+では、クレデンシャルは「json」ファイルに保存され、暗号化が異なります。

これは私のために仕事をしているようでした:

package org.familysearch.digitalarchive.tapedriveservice;

import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import Java.io.ByteArrayInputStream;
import Java.io.IOException;
import Java.io.InputStream;
import Java.nio.file.Files;
import Java.nio.file.Paths;
import Java.security.*;

public class DecryptDbeaver {

  // from the DBeaver source 8/23/19
  private static final byte[] LOCAL_KEY_CACHE = new byte[] { -70, -69, 74, -97, 119, 74, -72, 83, -55, 108, 45, 101, 61, -2, 84, 74 };

  static String decrypt(byte[] contents) throws InvalidAlgorithmParameterException, InvalidKeyException, IOException, NoSuchPaddingException, NoSuchAlgorithmException {
    try (InputStream byteStream = new ByteArrayInputStream(contents)) {
      byte[] fileIv = new byte[16];
      byteStream.read(fileIv);
      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
      SecretKey aes = new SecretKeySpec(LOCAL_KEY_CACHE, "AES");
      cipher.init(Cipher.DECRYPT_MODE, aes, new IvParameterSpec(fileIv));
      try (CipherInputStream cipherIn = new CipherInputStream(byteStream, cipher)) {
        return inputStreamToString(cipherIn);
      }
    }
  }

  static String inputStreamToString(Java.io.InputStream is) {
    Java.util.Scanner s = new Java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
  }

  public static void main(String[] args) throws Exception {
    if (args.length != 1) {
      System.err.println("param1: full path to your credentials-config.json file");
      System.exit(1);
    }
    System.out.println(decrypt(Files.readAllBytes(Paths.get(args[0]))));
  }

}

ローカルファイルシステム上のcredentials-config.jsonファイルのパスを渡します。私にとっては~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json

接続のユーザー+パスをリストします。どのパスワードがどのDBに送られるかわからない場合は、名前を兄弟data-sources.jsonファイル(暗号化されていない)。

0
rogerdpack