J'ai oublié le mot de passe d'une instance de développement (irresponsable .. ouais, je travaille dessus). J'ai la connexion enregistrée dans mon DBeaver avec le mot de passe. Je peux toujours me connecter en utilisant cette connexion. DBeaver ne l'affiche pas en texte brut. Puis-je de toute façon récupérer le mot de passe? Demander à DBA de réinitialiser le mot de passe est le dernier recours. J'ai essayé de copier-coller sur un bloc-notes, la copie est apparemment désactivée.
J'ai rencontré ce problème récemment. Suivez ces étapes (ma version DBeaver était 3.5.8 et c'était sur Mac OSX El Capitan)
~/.dbeaver/General/.dbeaver-data-sources.xml
. Ce fichier est caché, alors gardez cela à l'esprit lorsque vous le recherchez.J'ai mis en place un rapide et sale programme Java en copiant le noyau de la méthode de DBeaver pour décrypter le mot de passe. Une fois que vous avez la chaîne de mot de passe crypté, exécutez simplement ce programme, il convertira le mot de passe en texte brut et l'imprimera
Sur la ligne numéro 13, remplacez simplement OwEKLE4jpQ==
avec le mot de passe chiffré que vous trouvez dans .dbeaver-data-sources.xml
fichier pour votre source de données intéressée. Compilez-le et exécutez-le, il imprimera le mot de passe en texte brut.
https://github.com/jaisonpjohn/dbeaver-password-retriever/blob/master/SimpleStringEncrypter.Java
Apparemment, c'est une erreur "populaire". J'ai donc déployé une fonction lambda AWS avec le code susmentionné. Utilisez-le à vos risques et périls, vous ne saurez jamais si j'enregistre votre mot de passe ou non: D
curl https://lmqm83ysii.execute-api.us-west-2.amazonaws.com/prod/dbeaver-password-decrypter \
-X POST --data "OwEKLE4jpQ=="
Encore mieux, voici l'interface utilisateur http://dbeaver-password-decrypter.s3-website-us-west-2.amazonaws.com/ . Cela va sans dire, utilisez-le à vos risques et périls. Non-Https est le moindre de vos soucis! :)
s'il y a une déclaration de package, compilez simplement javac -d. SimpleStringEncrypter.Java il le mettra dans la structure de répertoire correcte sous le répertoire courant. Ensuite, vous pouvez donner Java -cp. Nom_package.SimpleStringEncrypter et il s'exécutera. Java de base.
Quoi qu'il en soit, ce programme est fantastique et m'a fait gagner beaucoup de temps.
Pour DBeaver 6.1.3+, les crédits sont stockés dans un fichier "json" maintenant avec un cryptage différent.
Cela a semblé faire le travail pour moi:
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]))));
}
}
Passez-lui le chemin de votre fichier credentials-config.json sur le système de fichiers local, pour moi c'était ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json
Il répertorie l'utilisateur + passe pour les connexions. Si vous ne savez pas quel mot de passe va à quelle base de données, vous pouvez croiser les noms avec le frère data-sources.json
fichier (non chiffré).