JumpServer 远程应用 DBeaver 连接的数据库密码为什么不能使用 | 字符?
【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver
通过 JumpServer 的远程应用(RemoteApp)用 DBeaver 连接数据库时,如果数据库账户的密码里含有|字符,代填连接无法工作。这是 DBeaver 代填实现机制本身决定的限制,本文基于仓库中 DBeaver 应用的说明与实际实现,解释这个限制从何而来,并说明它的适用范围和边界。
DBeaver 代填是如何组装连接参数的
DBeaver 应用以 applet 形式运行,安装来源与入口程序在 setup.yml 中定义:静默安装dbeaver-ce-22.3.4-x86_64-setup.exe到C:\Program Files\DBeaver,入口程序为C:\Program Files\DBeaver\dbeaver-cli.exe。
每次代填连接时,app.py 会把主机、端口、库名、用户名、密码等信息拼成一个参数字符串,再整体传给dbeaver-cli -con。核心代码如下(摘自AppletApplication._get_exec_params):
def _get_exec_params(self): driver = getattr(self, 'driver', self.protocol) params_string = f'name={self.name}|' \ f'driver={driver}|' \ f'host={self.host}|' \ f'port={self.port}|' \ f'database={self.db}|' \ f'user={self.username}|' \ f'password={self.password}|' \ f'save=false|' \ f'connect=true' return params_stringret = subprocess.Popen([self.path, '-con', params], startupinfo=startupinfo)也就是说,-con收到的是一串以|作为字段分隔符的key=value内容:name=...|driver=...|host=...|port=...|database=...|user=...|password=...|save=false|connect=true。
|冲突发生在哪里
password={self.password}是直接把账户密码插值进这个字符串的,密码本身并没有做任何转义处理。而整个参数字符串已经依赖|来切分各个字段:
- 如果密码本身含有
|,拼接后的字符串在该位置会被切分成多余的片段,password=后面得到的不再是完整的密码,后续save=false、connect=true等字段的解析也随之错位; - 同一机制下,部分数据库还会在密码之后继续追加
|分隔的参数。例如 MySQL 会追加|prop.allowPublicKeyRetrieval=true(_get_mysql_exec_params),Oracle 在勾选 sysdba 连接时会追加|authProp.oracle.logon-as=sysdba(_get_oracle_exec_params),这些追加项同样以|开头。
DBeaver 应用自身的说明文档对这一点有直接陈述(README_ZH.md):
因代填的实现机制,连接的数据库密码不支持使用
|字符。
所以这不是某个数据库或某个驱动的限制,而是代填拼参机制对所有协议通用的限制。
适用范围与前置事项
- 支持的协议:manifest.yml 中声明该应用支持
mysql、mariadb、postgresql、sqlserver、oracle,这五类协议下的密码代填都受同一限制约束。 - 驱动准备:按 README_ZH.md 的说明,连接数据库应用时需要下载驱动,可提前离线安装,或者连接时按提示安装相应驱动;应用启动时会先合并驱动配置(
init_driver_config)并写入部分偏好设置(init_other_config,如关闭自动更新检查、跳过首次运行提示)。 - 判断方式:对照 JumpServer 中该资产绑定的账户密码,只要密码字符串里出现
|,通过 DBeaver 代填方式连接就会受到上述限制影响;仓库文档没有提供绕过该限制的替代拼参方式或配置项。
边界
文档给出的结论是明确的:该限制由代填实现机制决定,密码不支持|字符,因此要通过 DBeaver 代填连接目标数据库,账户密码中不能包含这个字符。除此之外的连接方式(例如不使用 DBeaver 代填)不在该应用的文档范围内。
【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考