Keycloak is trusted for identity and access management. It protects logins, sessions, and tokens. But inside its database are columns with data that—if exposed—can undo everything it guards. These sensitive columns can store hashed passwords, secrets, user attributes, OTP configurations, and tokens that hold the keys to entire systems.
When those columns are not encrypted or masked, they are easy targets. A database leak, a misconfigured backup, or a low-privilege read can give attackers exactly what they need. Most teams think their network perimeter or database ACLs are enough. They are not. Threats often come from inside compromised services, maintenance jobs, or third-party integrations that were trusted too much.
Keycloak sensitive columns often appear in tables you already know:
USER_ENTITY– user metadata and sometimes PII in custom attributes.CREDENTIAL– hashed passwords, OTP secrets, and keys.CLIENTandCLIENT_SECRET– API credentials used across systems.OFFLINE_SESSIONandUSER_SESSION– refresh tokens that stay valid for long periods.
The danger isn’t just theft—it is persistence. A stolen client secret can be replayed for months. A leaked refresh token can bypass authentication without triggering normal login alerts. And because these are database-level compromises, traditional Keycloak logs often give no warning.