replication-manager ships a continuous compliance engine that audits every managed database server against a library of security controls. Findings are raised as typed error codes (SEC01xx), logged to security.log, surfaced in the GUI, and — where possible — fixed automatically or semi-automatically without a DBA touching the server by hand.
The compliance engine runs as part of the normal monitoring loop. It costs nothing to run and adds no load to the database servers — all checks are read-only queries against SHOW GLOBAL VARIABLES, mysql.user, and INFORMATION_SCHEMA.
The security plugins implement controls drawn from the CIS MySQL / MariaDB Benchmark and Signal18's own operational experience operating thousands of database clusters.
| SEC Code | Control | Description | Auto-fixable |
|---|---|---|---|
| SEC0100 | No-password accounts | Accounts with empty authentication_string and no socket auth |
Yes — ACCOUNT LOCK |
| SEC0101 | Weak auth plugin | mysql_native_password or mysql_old_password in use |
No — requires app changes |
| SEC0102 | local_infile enabled |
Allows LOAD DATA LOCAL INFILE file-read attack (CIS 4.5) |
Yes — SET GLOBAL local_infile=0 |
| SEC0103 | Plaintext transport | require_secure_transport=OFF — non-TLS connections accepted |
Partial — cnf advisory |
| SEC0104 | General query log | All SQL including plaintext passwords logged to disk | Yes — SET GLOBAL general_log=0 |
| SEC0105 | secure_file_priv unset |
Server can read/write any filesystem path | Partial — requires restart |
| SEC0106 | DNS hostname resolution | skip_name_resolve=OFF enables hostname spoofing |
Partial — requires restart |
| SEC0107 | Anonymous accounts | User='' in mysql.user — passwordless login for anyone |
Yes — DROP USER IF EXISTS ''@host |
| SEC0108 | Wildcard-host privileged user | Host='%' with SUPER/ALL/ADMIN privilege |
No — informational |
| SEC0109 | Table encryption off | innodb_encrypt_tables / aria_encrypt_tables both OFF |
Yes — rolling restart |
| SEC0110 | Binlog encryption off | encrypt_binlog / binlog_encryption both OFF |
Yes — rolling restart |
| SEC0111 | Tmp file encryption off | encrypt_tmp_files / encrypt_tmp_disk_tables both OFF |
Yes — rolling restart |
| SEC0112 | Audit logging off | server_audit plugin not loaded or logging disabled |
Yes — INSTALL SONAME |
| SEC0113 | No password length check | simple_password_check plugin not active (MariaDB) |
Yes — INSTALL SONAME |
| SEC0114 | No dictionary check | cracklib_password_check plugin not active (MariaDB) |
Yes — INSTALL SONAME |
| SEC0115 | No password reuse check | password_reuse_check plugin not active (MariaDB 10.7+) |
Yes — INSTALL SONAME |
| SEC0118 | Hostname grants + skip_name_resolve | Dead grants when name resolution is disabled | No — informational |
For full details on each code, logic, and configuration keys see Security Plugins.
At every monitoring tick, each loaded security plugin queries the server and emits zero or more findings. Each finding carries:
host:port where the issue was foundFindings are written to security.log and exposed in the cluster state so the GUI can display them as badge alerts on each server card.
The remediation engine aggregates all open findings into a plan you can retrieve at any time:
curl -s https://repman-host:10005/api/clusters/{cluster}/security/remediation-plan \
-H "Authorization: Bearer $TOKEN" | jq .
Each entry in the plan lists the finding, whether it is auto-fixable, and the risk level (safe / moderate / disruptive).
Auto-fixable findings can be resolved with a single API call:
curl -s -X POST \
https://repman-host:10005/api/clusters/{cluster}/security/fix-state/SEC0102 \
-H "Authorization: Bearer $TOKEN"
Safe fixes (local_infile, general_log, anonymous accounts, audit logging, password plugins) are applied at runtime with no service interruption. Disruptive fixes (at-rest encryption) trigger a rolling restart that respects the replication topology — primaries are restarted last.
Security plugins are distributed through the Signal18 plugin registry and require a registered instance.
Registration is free and takes under two minutes. It gives you:
plugin-security-*, plugin-security-hardening)To register, see Registration & SSO. Once connected, plugins are downloaded on the next replication-manager startup and updated automatically.
Required configuration to enable the compliance engine:
cloud18 = true
monitoring-plugins = true
Or as flags:
replication-manager monitor \
--cloud18 \
--monitoring-plugins \
...
All security plugins are available on every plan including Free. The plan affects support and services, not plugin access.
| Plan | Security plugins | Support | DBA services | Alert forwarding |
|---|---|---|---|---|
| Free | All | Community chat | — | — |
| Support | All | Signal18 engineering | — | Yes |
| Support + Services | All | Signal18 engineering | 12 days/year | Yes |
| Partner | All | Signal18 engineering | — | Yes |
Alert forwarding — Support, Support+Services, and Partner plans forward cluster ALERT/ALERTOK events (including compliance findings at alert level) to the Signal18 operations team automatically. Free plan findings are surfaced locally only.
To change your plan: Global Settings → Register → Marketplace in the GUI, or see Subscription Plans.
When a fix deploys a configuration change, it works through the compliance module tag mechanism rather than writing raw SQL. This ensures the fix survives server restarts by deploying a .cnf fragment alongside the runtime SET GLOBAL call.
Key security tags:
| Tag | Controls | Dynamic |
|---|---|---|
with_sec_localinfile |
SEC0102 | Yes |
with_log_general |
SEC0104 | Yes |
with_sec_keyfileencrypt |
SEC0109/0110/0111 | No — rolling restart |
audit |
SEC0112 | Yes |
with_sec_pwdchecksimple |
SEC0113 | Yes |
with_sec_pwdcheckcracklib |
SEC0114 | Yes |
with_sec_pwdcheckreuse |
SEC0115 | Yes (MariaDB 10.7+) |
with_sec_securetransport |
SEC0103 | Yes (MariaDB 10.3.5+) — advisory |
with_sec_securefilepriv |
SEC0105 | No — advisory |
with_sec_skipnameresolve |
SEC0106 | No — advisory |
with_sec_keyfileencrypt tag. Applying the tag without a valid key file will cause the server to fail to start after the rolling restart. Verify the key file path on all nodes before applying.mysql_native_password or mysql_old_password requires updating application connection strings. No automated fix is available — plan the migration carefully.%-host accounts requires auditing which applications connect with that account before changing.secure_file_priv and skip_name_resolve (SEC0105/0106): require server restart. The compliance engine sets a restart cookie and performs a rolling restart — plan for brief per-node downtime.