DBeaver 不管理密码有效期,仅执行数据库端的 SQL 命令;PostgreSQL 通过 ALTER ROLE ... VALID UNTIL 设置,需 CREATEROLE 权限;MySQL 8.0+ 用 PASSWORD EXPIRE 语句配合全局策略,无图形化界面支持;密码过期不影响当前连接,仅在重连时校验。

DBeaver 本身不管理密码有效期,它只是执行你发出的 SQL 命令。所谓“设置密码过期”,实际是向 PostgreSQL(或其他数据库)发送 ALTER ROLE 语句,由数据库服务端强制生效。DBeaver 只负责把这条命令发出去、显示结果、帮你填个表单而已。
PostgreSQL 中用 DBeaver 设置密码有效期
PostgreSQL 支持通过 VALID UNTIL 子句控制密码失效时间。DBeaver 的图形界面会把这个能力暴露出来,但前提是连接用户有 CREATEROLE 权限(或更高),否则保存时会报错 permission denied to alter role。
- 右键目标用户 → Edit User → 切换到 Security 标签页
- 在
Password和Confirm Password输入新密码(留空则不修改) -
Valid Until字段填入时间,格式为YYYY-MM-DD或YYYY-MM-DD HH:MM:SS(如2027-06-30或2027-06-30 23:59:59) - 点 OK 后,DBeaver 会自动执行类似下面的语句:
ALTER ROLE "myuser" WITH PASSWORD 'newpass' VALID UNTIL '2027-06-30';
MySQL 不支持 VALID UNTIL,得换方式
MySQL 8.0+ 虽然支持密码过期策略,但不是靠单条 SQL 指定某次修改的有效期,而是依赖全局策略 + 用户级覆盖。DBeaver 的 MySQL 连接界面里压根没有 Valid Until 字段——这不是 Bug,是 MySQL 本身不提供这个语法。
- 要启用密码过期,需先在服务器端配置:
ALTER USER 'myuser'@'%' PASSWORD EXPIRE INTERVAL 90 DAY; - 或者设为永不过期:
ALTER USER 'myuser'@'%' PASSWORD EXPIRE NEVER; - DBeaver 无法图形化操作这项,只能在 SQL 编辑器里手动执行上述语句
- 验证是否生效:
SELECT user, host, password_expired FROM mysql.user WHERE user = 'myuser';
为什么改完密码后,DBeaver 还连得上?
这是最容易被误解的一点:密码有效期只影响「下次认证时是否允许登录」,不影响当前已建立的连接。即使你把 VALID UNTIL 设为昨天,只要连接没断,DBeaver 依然能继续执行查询。
- 真正触发检查的时机是:客户端断开重连、或数据库重启后首次认证
- PostgreSQL 日志中会出现类似提示:
password expired for user "myuser" - 如果用的是连接池(如 HikariCP),池子里的旧连接可能长期存活,掩盖了过期问题
- 建议配合
pg_stat_activity查看活跃会话的backend_start时间,辅助判断连接是否“新鲜”
真正关键的不是“怎么点那个按钮”,而是搞清:有效期由谁控制、何时起效、出问题时去哪查日志。图形界面只是快捷入口,底层逻辑跑不掉数据库自身的权限模型和认证流程。

















