PostgreSQL如何创建需首次登录改密的用户及语法报错解决
PostgreSQL创建首次登录强制修改密码用户的解决方案
报错原因
CREATE USER语句的VALID UNTIL子句要求后续跟时间戳字面量,或者用括号包裹动态时间表达式,你直接写current_date未加括号,因此触发语法报错。
两种实现方案
方案1:创建用户时直接设置密码过期(推荐)
这是兼容性最好、最稳妥的实现方式,用户密码直接标记为过期,首次登录就会触发强制改密逻辑,不受登录时间限制:
CREATE USER myUser WITH PASSWORD 'mypass' PASSWORD EXPIRE;
如果你一定要用VALID UNTIL的写法,给current_date加括号即可修复语法错误:
CREATE USER myUser WITH PASSWORD 'mypass' VALID UNTIL (current_date);
注意:该写法的有效期仅到当天,用户如果当天未登录,次日账号会直接失效,不推荐生产环境使用。
方案2:对已创建的用户强制设置密码过期
如果用户已经创建完成,可以通过ALTER语句直接标记密码过期:
ALTER USER myUser PASSWORD EXPIRE;
状态验证
你可以执行以下SQL查看用户的密码过期状态:
SELECT usename, valuntil FROM pg_shadow WHERE usename = 'myUser';
配置完成后,用户使用初始密码登录时,PostgreSQL会自动弹出修改密码提示,设置新密码后即可正常使用数据库。
内容的提问来源于stack exchange,提问作者Dilitand
相关产品推荐
相关产品推荐

