Warum ĂŒberhaupt begrenzen?
Wenn WordPress regelmĂ€Ăig Daten aus Access zieht – z. B. Lieferstatus, Zeitfenster oder Ansprechpartner – willst Du zwei Dinge:
- Wissen, wer wie oft was abruft
- 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:
| Zeitstempel | Route | ClientKey | IP | Ergebnis |
|---|---|---|---|---|
| 2025-07-12 | get/lieferungen | abc123 | 10.1.1.17 | ok |
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.