不装客户端也能查库:Databasement内置Adminer数据浏览器实战
【免费下载链接】databasementSelf-hosted database backup manager with a web UI. Schedule, backup, and restore MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, MongoDB, SQLite & Redis to S3, SFTP, Samba or local storage. SSH Tunnel support.项目地址: https://gitcode.com/gh_mirrors/da/databasement
Databasement 是一款自托管数据库备份管理工具,除了定时备份与恢复 MySQL、PostgreSQL、SQLite 等数据库外,还内置了 Adminer 数据浏览器。只需在网页上点一下「Browse」,就能用浏览器直接查库、看表结构、跑 SQL 语句,完全不用安装任何桌面客户端。这篇文章带你实战 Databasement 内置 Adminer 的使用方法、权限配置和适用边界。
为什么需要"免客户端"的数据库浏览器
平时查库、改数据,大多数人依赖 Navicat、DBeaver、DataGrip 这类桌面客户端。它们功能强大,但存在两个痛点:
- 🖥️环境依赖:需要下载安装,公司内网机器装软件还要走审批流程;
- 🔐凭据分散:账号密码散落在每个客户端的配置里,不好统一管理。
而 Databasement 本身就要保存数据库的连接信息用于备份,把这些凭据"物尽其用"是顺理成章的事——内置的 Adminer 浏览器可以直接复用已注册的数据库服务器凭据,免密一键登录。
Databasement 的仪表盘界面,左侧导航中可以看到 Database Servers 管理入口:
内置 Adminer 支持哪些数据库
Databasement 内置的 Adminer 浏览器并非对所有服务器都可用,判断逻辑在 app/Models/DatabaseServer.php#L173-L178 的supportsAdminer()方法中,需要同时满足三个条件:
| 条件 | 说明 |
|---|---|
| 数据库类型 | 仅支持MySQL、PostgreSQL、SQLite |
| 无 SSH 隧道 | 配置了 SSH 隧道的服务器不支持 |
| 无 Agent 代理 | Agent 托管的服务器是"出站连接",Databasement 无法直连 |
也就是说:如果你的 MySQL / PostgreSQL / SQLite 服务器可以被 Databasement直连,那么它几乎一定可以被 Adminer 浏览。MongoDB、Redis、SQL Server 等类型暂时没有 Browse 入口。
实战:三步打开内置数据库浏览器
第 1 步:确认角色拥有use-adminer权限
Adminer 入口受use-adminer权限点控制,默认只有Admin角色持有。Super Admin 可以在Configuration → Roles页面为任意角色授予或收回该权限。这样你可以做到"普通成员只能看备份、不能查数据"的细粒度管控。
第 2 步:找到 Browse 按钮
权限就绪后,进入Database Servers页面:
- 在服务器列表页,兼容的服务器会直接显示Browse操作按钮;
- 进入某台服务器的详情页,同样有Browse按钮(见 resources/views/livewire/database-server/show.blade.php 中的渲染条件:角色有权限且服务器支持)。
第 3 步:一键打开,免密登录 🎉
点击Browse后,页面会弹出一个内嵌窗口加载 Adminer(由 app/Livewire/DatabaseServer/AdminerModal.php 驱动),并且已经自动登录——凭据从你保存的服务器配置中读取,无需再次输入账号密码。如果服务器只配置了一个数据库,还会直接跳到该库,省去手动选择。
底层原理:自动登录是怎么实现的?
对好奇的同学,整个链路非常清晰,源码都很短:
- 点击 Browse 时,app/Traits/OpensAdminerForServer.php 先做权限与兼容性校验,然后把目标服务器 ID 暂存到 Session,并派发打开弹窗的事件;
- 浏览器请求
/adminer路由(定义于 routes/web.php),app/Http/Controllers/Web/AdminerController.php 从 Session 取出服务器 ID,拼装出驱动类型、主机端口、用户名密码等凭据; - app/Services/AdminerService.php 加载
vendor/dg/adminer包并注入自定义 CSS,同时用缓存替代文件型 Session Handler,保证多 Pod 部署下 Adminer 的长连接与子资源加载不会互相阻塞。
简单说:凭据只存在于服务端 Session 的一次性传递中,浏览器端不需要、也看不到明文密码的二次交互,安全模型和备份功能共用同一份加密存储,没有新增暴露面。
常见限制与避坑提示
- ❌SSH 隧道服务器没有 Browse 按钮:Adminer 需要直连数据库,隧道场景请改用备份恢复或 SSH 隧道工具;
- ❌Agent 托管的服务器不支持:Agent 架构下数据库只对 Agent 可达,Databasement 服务端连不上;
- ⚠️凭据变更要同步:数据库密码修改后记得更新 Databasement 里的服务器配置,否则 Adminer 会自动登录失败。
项目官方文档中对 Adminer 一节有完整说明,可参见 docs/docs/user-guide/database-servers.md 的 "Browsing Data with Adminer" 章节。
写在最后
Databasement 把"备份"和"查库"整合进同一个 Web 界面,是很务实的设计:备份时保存的连接信息,随手就能变成一台随开的 SQL 工作台。对于运维、DBA 乃至开发同学,免客户端的内置 Adminer 数据浏览器足以覆盖日常的查表、验数、救火式 SQL 场景。
【免费下载链接】databasementSelf-hosted database backup manager with a web UI. Schedule, backup, and restore MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, MongoDB, SQLite & Redis to S3, SFTP, Samba or local storage. SSH Tunnel support.项目地址: https://gitcode.com/gh_mirrors/da/databasement
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考