Database integrity
How the database is named, who connects to it, and what else it can reach.
10 checks in this group, 4 with a full write-up.
The database is not just your data
Most of the checks in this group are about limiting what a single compromise can reach, not about protecting content from being lost. A default table prefix (jos_ or wp_) is not a secret, it is a convenience for anyone writing a generic SQL-injection payload that assumes it and gets to skip the step of finding out. A database user with root privileges, or one scoped across every database on the server rather than just the one it needs, turns “this site’s database got compromised” into “every site sharing that server’s database got compromised”, which on shared or reseller hosting is a realistic blast radius rather than a theoretical one. How to check Joomla database security walks through the full picture, including the questions this group’s automated checks do not ask on their own.
The rest of the group is about drift between what the CMS expects and what is actually sitting in the tables: a schema that is behind the version the CMS thinks it is running, backup tables an old migration or a nervous developer left behind and never dropped, pending migrations that never completed. None of these are attacks. They are the database equivalent of the configuration drift elsewhere in this reference, quiet enough that nothing breaks obviously, until an update assumes a column exists that a stalled migration never added.
On a portfolio of sites built up over years by different people, database hygiene is one of the places where the gap between “was fine at launch” and “still fine now” opens widest, because nobody looks at table structure unless something visibly breaks. A user action log nobody purges, growing without limit, is the same story: harmless until the table is large enough to slow every query that touches it. None of this needs a file-by-file scan to detect, which is why every check in this group runs on the twice-daily snapshot rather than waiting on a longer audit cycle.
Joomla
Default Database Prefix Should Not Be Set As jos_
jos_ was Joomla's fixed table prefix in early versions, so keeping it makes every table name guessable, one less obstacle an SQL injection has to clear.
Database User Should Not Be "root"
A root database user turns one SQL injection into access to every database on the server, not just this site's.
0.1% of the Joomla sites we have this data for fail it
DB User Should Only Have Access To One Database
If your database credentials can also see other databases on the server, one SQL injection on this site can reach every database that user has access to.
Backup Tables Should Be Removed From Database
Tables left over from a backup or migration, typically prefixed bak_, sit in the same database as your live data, so a compromise of one exposes the other too.
Joomla Core Database Schema Should Match Installed Joomla Version
The #__schema table records which database updates have run, and a mismatch against your Joomla version means an upgrade left tables only partly migrated.
Enable User Action Log Auto Purge After 30 Days
Joomla's action log records logins and configuration changes but never expires entries by default, so without a purge it grows indefinitely unread.
WordPress
Default Database Prefix Should Not Be Set As wp_
Checks whether your tables still use the default wp_ prefix, which lets an attacker with partial access guess table names instead of having to find them.
Database User Should Not Be "root"
A root database user turns one SQL injection into access to every database on the server, not just this site's.
DB User Should Only Have Access To One Database
Checks how many databases your MySQL credentials can see: if one is compromised, broader access means every other database on the account is exposed too.
Pending Database Migrations
Checks whether WordPress core has pending database schema updates it has not yet run, which can leave the site behaving inconsistently after an update.
Find out which of these your sites fail
Connect a site and every check in this group runs against it automatically, with the result and the fix in one place. These run twice a day on every connected site.
Run a free audit