恢复存储在我的 DBeaver 连接中的 DB 密码

我忘记了开发实例的密码(不负责任的。.是的,我正在努力)。我已经在我的 DBeaver 中用密码保存了连接。我仍然可以用那个连接连接。DBeaver 没有用纯文本显示它。有什么办法能让我找回密码吗?请求 DBA 重置密码是最后的手段。我试图复制粘贴到记事本,复制显然是禁用的。

102803 次浏览

对于 DBeaver 6.1.3 +

凭据文件位于 ~/Library/DBeaverData/workspace6/General/。Dbever/凭证-配置。Json (我当时在 Mac 上) ,它遵循的加密策略与之前的版本不同。请参考下一个答案,看看如何解密。效果很好。

前 DBeaver 6.1.3

按照以下步骤操作(My DBeaver 版本是3.5.8,它在 Mac OsX El Capitan 上)

  1. 找到 DBeaver 存储连接详细信息的文件 而我,就在这个地方 这个文件是隐藏的, 所以你找的时候记住这一点。
  2. 在该文件中找到感兴趣的数据源定义节点。
  3. 解密密码: 不幸的是,除了密码之外,所有内容都是纯文本; 密码是某种加密形式。使用此 工具将其解密为纯文本。

或者

I put together a quick and dirty Java 程序 by copying core of DBeaver's method for decrypting the password. Once you have the Encrypted password string, just execute this program, it will convert the password to plain text and prints it

如何运行它

On Line Number 13, just replace OwEKLE4jpQ== with whatever encrypted password you are finding in .dbeaver-data-sources.xml file for your interested datasource. Compile it and run it, it will print the plain-text password.

Https://github.com/jaisonpjohn/dbeaver-password-retriever/blob/master/simplestringencrypter.java

显然,这是个“大众”误会。因此,我使用上述代码部署了一个 AWS lambda 函数。使用它的风险自负,您将永远不会知道我是否记录您的密码

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

更妙的是,这里有一个 UI https://bugdays.com/dbeaver-password-decrypter。不用说,使用它的风险由你自己承担

如果有包声明只需编译 javac -d . SimpleStringEncrypter.java it will put it in the correct directory structure under the current directory 然后你可以给予 Java-cp. packagename. SimpleStringEncrypter,它将运行。 基本的爪哇咖啡。

不管怎样,这个节目很棒,为我节省了很多时间。

For DBeaver 6.1.3+ the creds are stored in a "json" file now with different encryption.

这似乎对我有效:

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 https://github.com/dbeaver/dbeaver/blob/57cec8ddfdbbf311261ebd0c7f957fdcd80a085f/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/impl/app/DefaultSecureStorage.java#L31
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("syntax: param1: full path to your credentials-config.json file");
System.exit(1);
}
System.out.println(decrypt(Files.readAllBytes(Paths.get(args[0]))));
}


}

在本地文件系统上传递您的凭证-config. json 文件的路径,对我来说是

 Compile it
$ javac DecryptDbeaver.java
Now run it [adjusts the paths to target your credentials-config.json file]
$ java DecryptDbeaver ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json
Or if java 11+:
$ java DecryptDbeaver.java ~/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json

它将向控制台输出用户 + 传递连接。

{"postgres-jdbc-some-id":{"#connection":{"user":"your_user_name","password":"your_password"...

如果你不能识别哪个密码去哪个数据库基于用户名,你必须交叉链接的 ID 名称,它也输出最初到兄弟 data-sources.json文件(应该已经存在和未加密,并包含数据库坐标)。

这可以通过 OpenSSL 实现:

openssl aes-128-cbc -d \
-K babb4a9f774ab853c96c2d653dfe544a \
-iv 00000000000000000000000000000000 \
-in credentials-config.json | \
dd bs=1 skip=16 2>/dev/null

一行中的 macOS 示例:

openssl aes-128-cbc -d -K babb4a9f774ab853c96c2d653dfe544a -iv 00000000000000000000000000000000 -in "${HOME}/Library/DBeaverData/workspace6/General/.dbeaver/credentials-config.json" | dd bs=1 skip=16 2>/dev/null

对于 Linux,将上面的路径更改为 ~/.local/share/DBeaverData/workspace6/General/.dbeaver/credentials-config.json

The key is from 源头 and is converted to hexadecimal. This can be done in Python:

>>> import struct
>>> struct.pack('<16b', -70, -69, 74, -97, 119, 74, -72, 83, -55, 108, 45, 101, 61, -2, 84, 74).hex()
'babb4a9f774ab853c96c2d653dfe544a'

编辑: 我出版了 这里的剧本

如果您不想要所有保存的连接

只需从文件系统中删除—— DBeaverData workspace6 General 文件夹 这样它就不能再问任何密码了。 and the workspace data will be lost.

您将失去所有的自定义设置和首选项。

适用于 Windows 用户(测试版本7.3.4,也测试了22.2.3)

按文件 > 导出 > DBeaver > 项目

Change the name of the export file to .zip, and unzip

Download OpenSSL, and copy \projects\General\.dbeaver\credentials-config.json into the same folder as the bin directory of openssl

然后跑:

openssl aes-128-cbc -d -K babb4a9f774ab853c96c2d653dfe544a -iv 00000000000000000000000000000000 -in "credentials-config.json"

如果您已经安装了 WSL,那么也可以在 Linux 安装中运行这个命令,并且可以从 Linux 安装中的任何目录(which openssl)获得 openssl (通过 Ubuntu 在 WSL2上将文件复制到 \\wsl$\Ubuntu\home\me\dbeaver\credentials进行测试)。

默认情况下,它会输出到终端,如果您在文件中需要它,请将 > chosen_filename.json添加到命令中。

看看这个:

docker run -d -p 18080:8080 --name crack-dbeaver-password-18080 geekyouth/crack-dbeaver-password


Https://github.com/geekyouth/crack-dbeaver-password

这是一个命令,用于在您想要的目标路径上获得 dbeader 凭证文件的解密版本:

openssl aes-128-cbc -d \
-K babb4a9f774ab853c96c2d653dfe544a \
-iv 00000000000000000000000000000000 \
-in {path for the encrypted credentials file} > \
{your desired destination file}

您将在桌面上找到 dbeaver-credentials.json文件。但是这个文件将只有用户名和密码列表,没有数据库或服务器名称。你得猜猜看。


对于 Ubuntu snap软件包 dbeaver-ce,

  • {加密凭据文件的路径} = ~/snap/dbeaver-ce/current/.local/share/DBeaverData/workspace6/General/.dbeaver/credentials-config.json
  • {所需的目标文件}例如 ~/Desktop/dbeaver-credentials.json

For Linux OS users, run this in Terminal:

openssl aes-128-cbc -d -K babb4a9f774ab853c96c2d653dfe544a -iv 00000000000000000000000000000000 -in "path_to/credentials-config.json" | dd bs=1 skip=16 2>/dev/null

只需用文件的实际路径替换字符串“ path _ to/credit-config. json”,就会得到如下内容:

{"mysql8-17e009389a8-5fc414bd64e183f4":{"#connection":{"user":"root","password":"root"}},"mysql8-18099236fdf-3c3fc761c6fdde":{"#connection":{"user":"user.name","password":"your_secret_password"},"network/ssh_tunnel":{"user":"sql","jumpServer0.password":""}}}%