Back to Blog/

How to Secure an ERP System in Production: A Practical Checklist

Server hardening is only the first layer. The ERP-specific risks that actually lose data are access control, database privileges, audit trails and untested backups - here is a checklist that works.

An ERP in production is the one system that holds everything - your finance, payroll, inventory and customer records in one database - so a security failure is not an IT problem, it is a business problem. Hardening the server underneath it is necessary, but it is only the first layer, because most real ERP incidents do not come from a compromised server. They come from the wrong person having access to a module, an application connecting to the database with admin privileges, a change nobody can trace, or a backup that turns out to be unrestorable the day it is needed. The checklist below covers the ERP-specific layers that server hardening does not reach.

Why an ERP is a different security problem

A compromised website can be restored from a backup and rebuilt in a day. An ERP cannot, because the value is the accumulated live data - every invoice, every payroll run, every stock movement - and because the people who use it daily are not technical. Three consequences follow. First, the data is the asset: encryption, access control and tested restores matter more than any firewall rule. Second, the threat is often internal: an employee with broader permissions than their role needs, a contractor who was never offboarded, or an honest mistake in a financial screen that no audit trail can explain. Third, downtime is measured in payroll and shipping delays, not in page views, so every control here is chosen to keep the system running, not just to lock it down.

Access control: the control that prevents most incidents

Most ERP incidents shrink to one sentence: someone had access they should not have had. Fix it with role-based access tied to actual jobs, and grant the minimum each role needs - a warehouse user reads inventory and writes stock movements, but never sees payroll; an accountant sees the ledger but cannot edit a closed period. Separate the everyday user from the administrator, require multi-factor authentication for anyone with admin or financial privileges, and review dormant accounts every quarter: an account that has not logged in for 90 days should be disabled, and every leaver must be offboarded the same day, not at the end of the month. Write the roles down, get them signed off by each department head, and audit them against reality twice a year - permissions drift open over time and never drift back on their own.

Database and secrets hygiene

The ERP application should never connect to its database as a superuser or admin. Create one database user with privileges limited to exactly the schemas and tables the application needs - no dropping, no user management - so a flaw in the application cannot wipe the ledger. Keep every credential, API key and payment-gateway secret out of the source repository and out of the ERP config directory in plain text: load them from the server environment or a secrets manager, and rotate them when staff with access leave. Encrypt traffic between the application and the database rather than trusting the local network, and switch on encryption at rest for the database volume. Finally, keep production data out of non-production environments: a staging server holding a copy of real customer records is a leak waiting to happen, so anonymise or mask the data before it is copied anywhere.

Audit logging and the backup you have actually tested

When a figure is wrong at month-end, the first question is who changed it and when. An audit log that records the user, the screen, the record and the timestamp - kept where even an admin cannot edit it, and retained for at least a year - answers that question in minutes instead of days, and it is exactly what a regulator asks for after an incident. Backups belong in the same breath, with one rule: a backup is not a backup until you have restored it. Take daily automated backups, keep copies off the server and off the site, enable point-in-time recovery so you can roll back to the hour before a bad import, and run a real restore drill every quarter into a throwaway environment. The drill is the only test that matters, and the companies that skip it are the ones that discover the backup was silently failing at the moment they needed it most.

Network exposure, patching and a named owner

Do not put the ERP administration interface on the public internet. Restrict it to an IP allowlist or a company VPN, put a web application firewall in front, and expose only what staff and integrations actually need. Keep the stack patched on a fixed cadence - the ERP core, the database, the operating system and every integration - and test each update in a staging environment before it touches production, because an untested ERP patch can break a payment flow as easily as it closes a hole. Then name one person accountable: someone who owns the checklist, runs the quarterly restore drill, reviews the audit anomalies, and reports to management. Security work that belongs to everyone belongs to no one, and on an ERP that is how controls quietly lapse until an audit - or an incident - finds them.

ERPSecurityDevOps

Frequently Asked Questions

Is ERP security the same as server hardening?

No, and confusing the two is why gaps get missed. Server hardening - SSH keys, a firewall, automatic updates, TLS - is the foundation, and it is where you start. But ERP risk is mostly about data: who can reach which records, whether the database connection is over-privileged, whether changes are traceable, and whether you can actually restore. A hardened server running an ERP with wide-open roles and an untested backup is still one bad click away from a data problem.

How often should we test ERP backups?

A full restore drill at least once a quarter, into a throwaway environment, then a spot-check that the restored data is usable - open the ledger, run a report, confirm the totals match. Daily automated backups with off-site copies are the baseline, and point-in-time recovery is what lets you undo a bad import to the hour. The quarterly drill is the part most teams skip, and it is the only part that proves the rest works.

What is the single highest-value control?

Role-based access with least privilege. It is the one control that shrinks the blast radius of every other failure - a leaked password, a misclicked import, a compromised laptop - because the attacker or the mistake hits a wall of permissions that does not include payroll or the closed ledger. It is also the cheapest to put right: it costs a meeting with each department head and a review of what each role actually needs.

Want this set up for you?

EGYmass handles hosting, security, and ongoing management - so you can focus on your product.

Get a Free Consultation