Most WordPress hacks don't start with some genius exploit. They start with a stale login. An old contractor account that never got removed. A client who shares their password over email. A "temporary" admin account that became permanent three years ago.
If you manage WordPress sites for clients, or run a team that touches multiple sites, your user policy is one of the most overlooked parts of your security setup. It's also one of the easiest to fix. Here's how to build one that actually holds up.
Why WordPress User Management Is a Security Problem, Not Just an Admin Task
Every WordPress user account is a potential way in. The more accounts you have, and the more of them sit around unused, the bigger your attack surface gets. This matters even more for agencies and teams, where multiple people, contractors, and clients all need some level of access at different times.
A clear user policy isn't about being strict for the sake of it. It's about making sure the right people have the right level of access, for the right amount of time, and nothing more.
The Core Principle: Least Privilege
The single most important rule in any user policy is least privilege. Give people the minimum access they need to do their job, nothing more.
- A content writer doesn't need Administrator access. Give them Author or Editor.
- A designer working on templates doesn't need to manage plugins.
- A client who just wants to check analytics doesn't need to touch the dashboard at all.
WordPress ships with five default roles: Administrator, Editor, Author, Contributor, and Subscriber. For most teams, these cover 90% of use cases. Reach for a role management plugin like Members or User Role Editor only when you need something more granular, like a role that can edit posts but never install plugins.
Building a WordPress User Policy Step by Step
1. Map Out Who Actually Needs Access
Before creating a single account, list every person who touches the site: internal team members, freelancers, the client themselves, and any third-party developers. For each person, write down what they actually need to do. This alone usually reveals a handful of accounts that shouldn't exist anymore.
2. Assign Roles Based on Function, Not Convenience
It's tempting to make everyone an Administrator because it's easier and nobody complains about missing permissions. Resist this. Every extra admin account is another target for brute force attempts and phishing.
A good rule of thumb:
- Administrator - only the site owner and your lead developer or two.
- Editor - content managers who oversee other writers.
- Author/Contributor - writers and freelancers producing content.
- Subscriber - anyone who just needs a login for gated content or comments.
3. Set Strong Password Requirements
WordPress will let users set weak passwords unless you stop them. Use a plugin to enforce minimum password strength, and require password changes if you ever suspect an account was involved in a breach elsewhere. Never let anyone reuse a password from another site, especially for admin-level accounts.
4. Require Two-Factor Authentication for Anyone With Elevated Access
Passwords alone are not enough anymore. If someone has Editor access or higher, they should have two-factor authentication turned on. It takes minutes to set up and stops the vast majority of account takeover attempts, even if a password leaks somewhere else. We walked through the setup process in How to Set Up Two-Factor Authentication on WordPress in Under Ten Minutes.
5. Build an Offboarding Process, Not Just an Onboarding One
This is where most policies fall apart. Teams are usually good about creating accounts when someone joins a project. They're terrible about removing them when someone leaves.
Make offboarding a required step, not an afterthought:
- Remove or deactivate the account the same day a contractor's work ends.
- Rotate any shared credentials (FTP, hosting panel, database) that the person had access to.
- Review API keys or application passwords tied to that person and revoke them.
Set a recurring calendar reminder, monthly or quarterly, to audit your user list against your current team roster. Anyone who shouldn't be there anymore gets removed.
Handling Client Access Without Creating Risk
Clients often want some level of access, whether that's to check their own site, approve content, or just feel like they're not locked out of something they own. The trick is giving them visibility without giving them the keys to everything.
- Give clients Editor access at most, unless they specifically manage their own plugins and updates.
- Avoid sharing hosting panel logins directly. If they need to see backups, uptime, or billing, use a proper access-sharing setup instead of handing over your main account.
- Document what access they have, in writing, so there's no confusion six months later about who can do what.
This is exactly the kind of problem that granular permission systems solve. Instead of sharing your actual hosting login with a client or freelancer, you can invite them with a scoped invitation, limited to specific sites, and set to Read Only or Full Access depending on what they need. If they only need to check on their own site's health, they get exactly that, and nothing tied to your other clients ever gets exposed.
Auditing Your User List Regularly
A user policy isn't a one-time setup. It needs regular maintenance. Once a quarter, go through your WordPress user list and ask three questions for every account:
- Does this person still need access?
- Is their role still appropriate for what they do?
- Have they logged in recently, or has the account gone dormant?
Dormant admin accounts are a favorite target for attackers, since nobody notices if they're compromised right away. We covered related monitoring habits in How to Monitor Your WordPress Site for Suspicious Activity Without Becoming a Security Expert.
Document Everything
Keep a simple internal record, even a basic spreadsheet works, listing every user, their role, who granted access, and when it should be reviewed or expire. This becomes invaluable when you're managing more than a handful of client sites, and it's the first thing you'll want when troubleshooting a security incident.
Putting It All Together
A security-focused WordPress user policy doesn't need to be complicated. It needs three things: clear roles matched to actual needs, a real offboarding process, and regular audits to catch what slips through. Combine that with strong login security practices, which we detailed in WordPress Login Security: Simple Changes That Stop the Majority of Brute Force Attempts, and you've closed off one of the most common ways WordPress sites get compromised.
Start small. Pick one thing from this post, whether it's auditing your current user list or setting up two-factor authentication for your admins, and do it this week. The rest can follow once that habit is in place.