应通过数据库服务端权限控制隐藏敏感库名,而非DBeaver配置;MySQL需回收SHOW DATABASES权限,PostgreSQL需撤销pg_database SELECT权限,SQL Server需控制VIEW ANY DATABASE权限。

连接列表里显示了 test_db、dev_user 等敏感库名,怎么隐藏?
DBeaver 本身不提供“按库名隐藏”的开关,它默认展示所有你有权限看到的数据库(schema)。所谓“隐藏”,其实是控制 SHOW DATABASES 或 SELECT schema_name FROM information_schema.schemata 这类元数据查询的结果。真正起作用的是数据库服务端的权限配置,不是 DBeaver 的界面设置。
常见误操作是反复翻找 Connection Settings → Metadata 或 Driver Properties,但这些选项只影响元数据加载方式(比如是否缓存、是否递归加载表),不会过滤掉已授权的库。
- MySQL:回收用户对
information_schema的SELECT权限,或用REVOKE SHOW DATABASES ON *.* FROM 'user'@'%'(注意:这会同时禁用SHOW DATABASES命令) - PostgreSQL:撤销对
pg_database的SELECT权限,或用REVOKE CONNECT ON DATABASE sensitive_db FROM user(仅断连,不隐藏) - SQL Server:移除用户对
master.sys.databases的读取权限(需VIEW ANY DATABASE权限控制)
为什么改了连接属性里的 “Show system objects” 没用?
Show system objects 只控制是否显示 mysql、information_schema、pg_catalog 这类系统库/模式,不影响业务库的可见性。哪怕关掉它,只要用户能查到 dev_orders 或 prod_analytics,它们就仍会出现在连接树里。
这个选项在 Connection Settings → Metadata → Show system objects 下,勾选与否只改变左侧导航树中是否展开系统对象节点,和“敏感库是否出现”无因果关系。
- 它不影响
SELECT权限,也不触发任何服务端过滤 - 它只在 DBeaver 加载元数据时跳过系统 schema 的解析步骤
- 如果你看到的“敏感库”是业务库(非系统库),调这个参数纯属白忙
有没有不改权限、只靠 DBeaver 配置实现“视觉隐藏”?
没有真正意义上的隐藏,但可以绕过——通过自定义连接别名 + 过滤器视图,让敏感库在 UI 上“不可见”。这不是服务端过滤,而是客户端折叠。
操作路径:Connection Settings → Connection name 改成一个泛化名称(如 prod-cluster),再打开 Connection Settings → Metadata → Filter schemas,填入正则表达式,例如 ^(?!test|dev|staging).*$(排除含 test/dev/staging 的库名)。
- 该正则只影响 DBeaver 加载时的 schema 列表,不改变实际权限
- 若库名是
myapp_dev_v2,而正则写的是^dev$,它不会被过滤;必须匹配完整片段 - 过滤后,被排除的库仍可通过 SQL 编辑器直接
USE myapp_dev_v2访问,只是不出现在左侧树形结构中 - 每次新建连接都要手动配一次,无法全局生效
最稳妥的做法:从连接源头切断元数据暴露
与其在 DBeaver 界面里兜圈子,不如让数据库服务端根本不返回那些库。这是唯一能防止敏感库名泄露到任意客户端(包括其他工具、脚本、CI 流水线)的方式。
典型场景是开发环境共用 MySQL 实例,不同团队各自有 team_a_prod、team_b_test 库。此时应为每个用户创建独立账号,并只授予其对应库的 USAGE 和必要 DML 权限,同时确保不给 SHOW DATABASES 或跨库元数据访问权。
容易被忽略的一点是:即使用户没有某库的 SELECT 权限,只要拥有 SHOW DATABASES,依然能在 DBeaver 连接树里看到库名——名字本身已是信息泄露。


















