Query Ergebnis manipulieren (Proxy)
Verfasst: Samstag 16. April 2022, 10:39
Hi,
es gibt eine Applikation, die ganz normal über den ORM Anfragen an eine MySQL Datenbank stellt.
Jetzt sollen die Queries und das Resultat dieser Queries untersucht werden, ohne, dass die Applikation angefasst werden soll. Das gehört zur Anforderung dazu.
Die Untersuchung soll derart ablaufen, dass wenn etwas Bestimmtes in dem Anfrage-SQL von der Applikation steht, dass dann ein Wert aus dem Ursprungs-Query-Ergebnis an einen separaten Service geschickt und im Ursprungs-Query-ergebnis ersetzt wird.
Pseudo:
Mir kommt da bislang nur ein Proxy in den Sinn, der genau das kann. Jedoch finde ich bei ProxySQL nicht so eine Fähigkeit. Der kann SQL rewriten, aber Werte aus dem Ergebnis auslesen und an einen anderen Service schicken, habe ich nicht gefunden.
Bei dem alten mysql proxy habe ich gefunden, dass er pro Query ein LUA-Skript aufruft und man ggf dort das Ganze platzieren kann. Aber der wird von Mysql auch nicht mehr empfohlen.
Jetzt überlege ich, ob man den Proxy-Server nicht selbst bauen kann? Quasi als Django-Applikation oder so. Nur weiß ich nicht, wie performant und einfach das wäre.
Die App müsste auch das Mysql-Protokol verstehen, weil das ja vorne reinkommt.
Hat jemand eine Idee?
Schöne Ostertage.
es gibt eine Applikation, die ganz normal über den ORM Anfragen an eine MySQL Datenbank stellt.
Jetzt sollen die Queries und das Resultat dieser Queries untersucht werden, ohne, dass die Applikation angefasst werden soll. Das gehört zur Anforderung dazu.
Die Untersuchung soll derart ablaufen, dass wenn etwas Bestimmtes in dem Anfrage-SQL von der Applikation steht, dass dann ein Wert aus dem Ursprungs-Query-Ergebnis an einen separaten Service geschickt und im Ursprungs-Query-ergebnis ersetzt wird.
Pseudo:
Code: Alles auswählen
def check(query):
if 'foo' in query:
query_result = query.get_result()
send_value_to_sevice(query_result.value('hallo'))
query_result = query_result.replace('hallo', 'moin')
return query_result
else:
query_result = query.get_result()
return query_result
Mir kommt da bislang nur ein Proxy in den Sinn, der genau das kann. Jedoch finde ich bei ProxySQL nicht so eine Fähigkeit. Der kann SQL rewriten, aber Werte aus dem Ergebnis auslesen und an einen anderen Service schicken, habe ich nicht gefunden.
Bei dem alten mysql proxy habe ich gefunden, dass er pro Query ein LUA-Skript aufruft und man ggf dort das Ganze platzieren kann. Aber der wird von Mysql auch nicht mehr empfohlen.
Jetzt überlege ich, ob man den Proxy-Server nicht selbst bauen kann? Quasi als Django-Applikation oder so. Nur weiß ich nicht, wie performant und einfach das wäre.
Die App müsste auch das Mysql-Protokol verstehen, weil das ja vorne reinkommt.
Hat jemand eine Idee?
Schöne Ostertage.