Wie ich API-Zugriffe aus WordPress auf Access selektiv protokolliere und limitiere

Warum ĂŒberhaupt begrenzen?

Wenn WordPress regelmĂ€ĂŸig Daten aus Access zieht – z. B. Lieferstatus, Zeitfenster oder Ansprechpartner – willst Du zwei Dinge:

  1. Wissen, wer wie oft was abruft
  2. Verhindern, dass das Frontend Dein Backend lahmlegt

Das geht. Auch ohne API-Gateway oder Azure-Firewall.
Access kann mehr, als viele glauben – auch beim Logging und Zugriffskontrolle.

Ausgangslage

  • Access stellt per HTTP API-Endpunkte bereit (z. B. ĂŒber lokales Script oder n8n)
  • WordPress ruft diese regelmĂ€ĂŸig ab (per wp_remote_get() oder JS-Fetch)
  • Du willst Zugriffe protokollieren und zĂ€hlbar limitieren – nach IP, Key, oder Route

Variante A: Access liefert ĂŒber ein lokales HTTP-Modul (z. B. VBA + Mini-Webserver)

Du brauchst eine Middleware – etwa ein lokales Script (Python, Node.js, n8n, VBA-Wrapper), das HTTP-Anfragen entgegennimmt und Access fragt.

Die Requests kannst Du in einer Tabelle loggen:

CREATE TABLE tbl_APILog (
    ID AUTOINCREMENT PRIMARY KEY,
    Zeitstempel DATETIME DEFAULT Now(),
    Route TEXT(100),
    ClientKey TEXT(100),
    IP TEXT(50),
    Ergebnis TEXT(100)
)

Logging per Access-SQL aus Middleware

Public Sub LogAPIZugriff(route As String, key As String, ip As String, status As String)
    Dim sql As String
    sql = "INSERT INTO tbl_APILog (Route, ClientKey, IP, Ergebnis) " & _
          "VALUES ('" & route & "', '" & key & "', '" & ip & "', '" & status & "')"
    CurrentDb.Execute sql, dbFailOnError
End Sub

Du rufst das aus Deinem API-Modul auf, bevor Du die Daten zurĂŒckgibst.

Limitierung: Abfrage der letzten 24h

Vor dem Zugriff prĂŒfen:

Public Function AnfragenHeute(route As String, key As String) As Long
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset( _
        "SELECT COUNT(*) AS Anzahl FROM tbl_APILog WHERE " & _
        "Route='" & route & "' AND ClientKey='" & key & "' AND Zeitstempel > Date()-1")

    AnfragenHeute = rs!Anzahl
    rs.Close
End Function

Dann kannst Du blocken:

If AnfragenHeute("get/lieferungen", "abc123") > 100 Then
    ResponseText = "{""error"":""Rate limit reached""}"
    Exit Sub
End If

Variante B: WordPress-API ruft lokalen Access-Dienst via n8n ab

Dann verschiebst Du die Limitierung in den Flow – aber speicherst trotzdem die Zugriffe in einer Access-Tabelle.

In n8n kannst Du mit HTTP Request + IF + Webhook arbeiten:

  • PrĂŒfung der Access-Logtabelle per ODBC (z. B. mit Python-Node oder SQL Query)
  • Entscheidung: weiter oder blockieren
  • Logging jedes erfolgreichen oder blockierten Zugriffs

Das Logging machst Du direkt aus n8n:

INSERT INTO tbl_APILog (Route, ClientKey, IP, Ergebnis)
VALUES ('get/lieferungen', 'abc123', '192.168.1.10', 'ok')

WordPress-Clientseite: Zugriff nur mit API-Key

Der Key wird z. B. im Theme hinterlegt oder per Token zugewiesen:

$response = wp_remote_get('http://api.local/access/get/lieferungen?key=abc123');

Im Access-Backend prĂŒfst Du diesen Key gegen eine Whitelist:

SELECT * FROM tbl_APIKeys WHERE Key = 'abc123' AND Aktiv = True

Erweiterung: Limit pro IP + Key

Du kannst auch nach IP differenzieren (ggf. ĂŒber PHP-Header $_SERVER['REMOTE_ADDR'] mit ĂŒbergeben).

Dann protokollierst Du wie folgt:

ZeitstempelRouteClientKeyIPErgebnis
2025-07-12get/lieferungenabc12310.1.1.17ok

Und limitierst z. B. auf 5/min pro IP.

Monitoring: Übersicht der API-Nutzung

Abfrage:

SELECT ClientKey, Route, COUNT(*) AS AnfragenHeute
FROM tbl_APILog
WHERE Zeitstempel > Date() - 1
GROUP BY ClientKey, Route
ORDER BY AnfragenHeute DESC

Oder Pivot fĂŒr Ausreißer und Missbrauch.

Mein wolliges Fazit

WordPress fragt. Access antwortet.
Aber nur, wenn Du willst.

Du brauchst keinen teuren API-Gateway.
Nur eine saubere Tabelle, ein paar VBA-Zeilen – und den Mut, mal „nein“ zu sagen.

Der SchĂ€ferhund? Der zĂ€hlt mit. Und blockt, wenn’s reicht.

Kategorien: