Windows环境下Keycloak管理员密码重置及相关报错处理
在Windows系统中重置Keycloak管理员密码
情况1:使用内嵌H2数据库(默认配置)
- 停止Keycloak服务,确保完全关闭。
- 找到Keycloak安装目录下的
data/h2文件夹,里面有类似keycloak.mv.db的数据库文件。 - 打开命令提示符(CMD),导航到Keycloak的
bin目录:cd C:\你的Keycloak路径\bin - 启动H2控制台:
h2.bat - 在H2控制台的连接设置里,JDBC URL填对应路径(比如Keycloak在
C:\keycloak,就填jdbc:h2:C:/keycloak/data/h2/keycloak),用户名默认是sa,密码留空,点击「连接」。 - 执行以下SQL语句重置密码,把
new_password换成你要的新密码,admin是默认管理员用户名(如果你的管理员账号不是admin,替换成对应名称):UPDATE USER_ENTITY SET CREDENTIALS = '[ { "value": "'||ENCODE('new_password', 'UTF-8')||'", "type": "password", "salt": "", "hashIterations": 0, "createdDate": '||UNIX_TIMESTAMP()||'000, "secretData": "{\"value\":\"'||ENCODE('new_password', 'UTF-8')||'\",\"salt\":\"\"}", "credentialData": "{\"hashAlgorithm\":\"pbkdf2-sha256\",\"hashIterations\":27500,\"priority\":10}" } ]' WHERE USERNAME = 'admin'; - 关闭H2控制台,重启Keycloak服务,用新密码登录管理员后台。
情况2:使用外部数据库(如MySQL、PostgreSQL)
- 停止Keycloak服务。
- 用数据库管理工具(比如MySQL Workbench、pgAdmin)连接到你的外部数据库。
- 找到
user_entity表,执行对应SQL更新密码:MySQL示例
UPDATE user_entity SET credentials = JSON_SET( credentials, '$[0].value', SHA2('new_password', 256), '$[0].secretData', JSON_OBJECT('value', SHA2('new_password', 256), 'salt', '') ) WHERE username = 'admin';PostgreSQL示例
UPDATE user_entity SET credentials = jsonb_set( credentials, '{0,value}', to_jsonb(encode(sha256('new_password'::bytea), 'hex')), true ) || jsonb_set( credentials, '{0,secretData}', '{"value":"' || encode(sha256('new_password'::bytea), 'hex') || '","salt":""}'::jsonb, true ) WHERE username = 'admin'; - 保存更改后,重启Keycloak服务,用新密码登录。
情况3:Docker运行的Keycloak(Windows系统)
- 停止Keycloak容器:
docker stop <容器名称或ID> - 若使用内嵌数据库,可进入容器操作或处理挂载的H2数据卷(参考情况1);若用外部数据库,参考情况2操作。
- 也可以直接删除原有容器(无数据保留需求时),重新启动并指定新密码:
docker run -d -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=new_password quay.io/keycloak/keycloak:latest start-dev
内容的提问来源于stack exchange,提问作者Alagusundaram R
相关产品推荐
相关产品推荐

