DBeaver只是数据库客户端,不创建和管理账号,只读权限必须在数据库服务端(如MySQL/PostgreSQL)通过GRANT授权实现;客户端配置仅起辅助防护作用,无法替代服务端权限控制。

直接说结论:DBeaver 本身不创建、不管理数据库账号,它只是客户端;给新同事配只读权限,必须在数据库服务端完成授权,DBeaver 只负责用这个账号连上去并限制操作行为。
为什么不能在 DBeaver 里建只读账号
DBeaver 是 JDBC 客户端,没有 ALTER USER、GRANT 权限的执行能力,也不接触数据库的用户系统。它看到的只是你传进去的用户名密码,后续所有权限控制都由数据库服务端(如 MySQL、PostgreSQL)决定。你在 DBeaver 里点“新建连接”填的 username 和 password,只是告诉它“用谁的身份去连”,不是“在这里新建一个谁”。
常见误解是以为在 DBeaver 的连接配置里勾个“只读模式”就能锁死权限——它确实有 read-only 连接参数,但那只是 JDBC 层面的提示,服务端不认这个,照样能执行 UPDATE(只要账号本身有权限)。
MySQL 中配只读账号的最小可行步骤
以 MySQL 8.0+ 为例,需在服务端执行 SQL 授权(用有 CREATE USER 和 GRANT OPTION 权限的账号登录):
CREATE USER 'ro_user'@'%' IDENTIFIED BY 'StrongPass123!'; GRANT SELECT ON `myapp_%`.* TO 'ro_user'@'%'; FLUSH PRIVILEGES;
关键点:
-
SELECT是只读核心权限,别漏掉SHOW VIEW(否则看不到视图定义) - 库名用
myapp_%这种通配符要谨慎,避免误授生产库;更安全的是明确写myapp_prod和myapp_test - 务必执行
FLUSH PRIVILEGES,否则授权不生效 - 不要给
USAGE或空权限——那会导致连得上但查不了任何表
PostgreSQL 中只读账号的典型写法
PostgreSQL 没有全局 SELECT ON DATABASE,必须进具体库授权:
-- 先连到目标库(如 myapp_prod) \c myapp_prod -- 创建用户 CREATE USER ro_user WITH PASSWORD 'StrongPass123!'; -- 授予 USAGE 权限到 schema(通常是 public) GRANT USAGE ON SCHEMA public TO ro_user; -- 授予 SELECT 到所有现有表 GRANT SELECT ON ALL TABLES IN SCHEMA public TO ro_user; -- 让后续新建表也自动可读(关键!否则新人连不上新表) ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO ro_user;
容易踩的坑:
- 忘了
GRANT USAGE ON SCHEMA→ 报错permission denied for schema public - 没加
ALTER DEFAULT PRIVILEGES→ 新人连得上,但查不到开发刚建的表 - 用
pg_dump导出时发现没权限读pg_catalog系统表 → 实际不影响业务查询,但 DBeaver 的“表结构浏览”会少些元数据,属正常现象
DBeaver 端可做的辅助限制(非强制,但实用)
虽然不能替代服务端授权,但可在 DBeaver 连接配置里加几道软防线:
- 在连接编辑页 → Driver properties 标签页,添加键值:
readOnly=true(MySQL)或defaultRowFetchSize=100(防大结果集卡死) - 禁用危险操作:右键连接 → Edit Connection → SQL Execution → 勾选
Disable DDL statements(禁用 CREATE/ALTER/DROP)和Disable data modification statements(禁用 INSERT/UPDATE/DELETE) - 设置默认只读模式:菜单 Database → Transaction mode → 选
Read-only(注意:这仅影响当前连接窗口,新开 SQL 编辑器仍需手动切)
这些设置不会阻止有权限的账号执行写操作(如果服务端授权错了),但能防止手抖误点“执行全部”或双击表名弹出编辑窗口后误保存。
真正起作用的永远是服务端那几行 GRANT。DBeaver 配置再严,只要账号本身有 UPDATE 权限,换 Navicat 或命令行照样能删数据。所以审核权限语句比折腾客户端设置重要得多。


















