20261021-admin-login-guard.sql 872 B

12345678910111213141516171819
  1. -- Deploy before the application. No automatic expiry or browser unlock.
  2. CREATE TABLE IF NOT EXISTS admin_login_guard (
  3. account_type VARCHAR(16) NOT NULL,
  4. account_id BIGINT NOT NULL,
  5. failed_count INT NOT NULL DEFAULT 0,
  6. locked TINYINT(1) NOT NULL DEFAULT 0,
  7. last_failure_time DATETIME NULL,
  8. locked_time DATETIME NULL,
  9. PRIMARY KEY(account_type, account_id)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  11. -- Developer-only manual recovery example. Verify identity and investigate first.
  12. -- Replace 123 with the verified account ID; use admin instead of cms_user for legacy admins.
  13. -- START TRANSACTION;
  14. -- UPDATE admin_login_guard SET failed_count=0, locked=0, locked_time=NULL
  15. -- WHERE account_type='cms_user' AND account_id=123;
  16. -- UPDATE cms_user SET status=1 WHERE id=123;
  17. -- COMMIT;
  18. -- Resetting a password or toggling status in the UI DOES NOT clear the guard lock.