真正可靠的只读保护需通过连接参数、用户权限和驱动配置三层控制:MySQL需设readOnly=true并配只读账号;达梦还需禁用autoCommit且用只读角色;最稳妥是只读账号+禁用DBeaver执行按钮。

不能直接设置全局只读模式,但可以通过连接参数、用户权限和驱动配置三层控制,让 DBeaver 实际无法执行写操作——这才是真正可靠的只读保护。
MySQL 连接时加 readOnly=true 参数
这个参数本身不强制只读,但它会触发 JDBC 驱动的只读语义检查,在部分场景下能拦截 INSERT/UPDATE/DELETE。关键在于它必须配合数据库用户的只读权限才有效。
- 在 DBeaver 新建或编辑 MySQL 连接 → 切换到 驱动属性(Driver Properties) 选项卡
- 添加新属性:
readOnly=true - 同时确保该连接使用的数据库账号只有
SELECT权限(例如用GRANT SELECT ON db.* TO 'ro_user'@'%';创建) - 不推荐单独依赖此参数:如果用户有写权限,
readOnly=true可被绕过(比如显式执行SET SESSION TRANSACTION READ WRITE)
达梦(DM)数据库需显式禁用自动提交 + 权限隔离
达梦对只读控制更严格,但 DBeaver 默认开启自动提交(autoCommit=true),这会让单条 DML 立即生效。必须双管齐下:
- 连接驱动属性中,把
autoCommit设为false - 再添加
readOnly=true - 达梦服务端必须用只读角色(如
ROLE PUBLIC不含 DML 权限)创建用户,不能只靠客户端参数 - 注意:达梦 8+ 的
DmJdbcDriver18.jar对readOnly支持较完善,旧版驱动可能忽略该参数
通用兜底方案:用只读用户 + 禁用 SQL 编辑器执行按钮
最稳妥的做法不依赖任何参数,而是从权限源头和 UI 行为两层封堵:
- 数据库侧创建专用只读账号,并回收
INSERT/UPDATE/DELETE/DROP/CREATE等所有非查询权限 - 在 DBeaver 中,右键连接 → 编辑连接 → SQL 编辑器 选项卡 → 取消勾选
Enable SQL execution(这样连SELECT都不能手动执行,彻底锁死) - 如果只是想防误操作而非绝对禁止,可保留执行能力,但务必确认该连接使用的用户在数据库里确实没有写权限——DBeaver 不会替你校验权限,它只负责转发 SQL
容易被忽略的一点:DBeaver 的「数据编辑」功能(双击表→Edit Data)默认走的是事务性更新路径,即使连接设了 readOnly=true,只要用户有权限,照样能点保存。真正的只读,永远始于数据库账号权限设计,而不是客户端开关。


















