Seite 1 von 1

Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 5. Okt 2023 23:46
von Jensemann_P
Hi Leute,

mir stellt sich gerade folgende frage: Kann ich werte "sicher", also zumindest mal als Hash ablegen oder direkt aus einer Rule auf eine Datenbank zugreifen?

Soweit ich das bisher sehe ist der Direkte Datenbankzugriff nicht vorgesehen.

Wenn ich nun z.B. einen Zugang mit RFID realisiere, würde ich ungern die Daten in klartext im Script stehen haben.

Klassisch mit PHP/Mysql wüsste ich wie's geht.

Welche Möglichkeiten gibt es hier? Ich bin ja bestimmt nicht der Erste mit so einer Art Problemstellung.

Eine naheliegende Lösung wäre ja im Script zumindest nur den gehashten Wert abzulegen und den empfangenen String dann direkt in OH zu hashen und gegenzuchecken.

Gibts dazu denn etwas vorbereitetes in ECMA-Script oder gar blockly (bisher nichts gefunden)? Ich glaube eine SHA-Algorithmus von Hand zu implementieren dürfte hier meine Fähigkeiten bezüglich JS deutlich überschreiten.

Vlt hat ja jemand einen schubs für mich.

LG
Jens

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 6. Okt 2023 07:45
von udo1toni
Nein, openHAB hat da direkt nichts zu bieten.

Grundsätzlich, wenn ein Channel eines Things Daten liefert, kannst Du diese Daten über die Persistence speichern lassen. Daten, die über die Persistence gespeichert wurden, kannst Du auch wieder abrufen, allerdings ist es nicht vorgesehen, ganze Tabellen einzulesen, der einzig vorgesehene Bezug ist der über den Zeitpunkt bzw. Zeitraum, was z.B. bei einer Abfrage der Form "steht der gelieferte Schlüssel in der Tabelle?" nicht hilfreich ist.

Am ehesten könnte man vermutlich ein Script anstoßen, welches die Datenabfrage an eine Datenbank nach Wunsch richtet, vielleicht sogar mit einer Stored Procedure, so dass die Daten niemals die Datenbank verlassen müssen.

Da es ja um eine Authentisierung über den RFID-Reader geht, wäre es naheliegend, die konkreten Daten überhaupt nicht an openHAB zu schicken, sondern die Schnittstelle vom RFID-Reader direkt per Script in die Datenbank zu verlängern. Die Datenbank könnte dann die Ausgabe direkt an openHAB senden - alternativ auch an das Script, welches den Steuerbefehl dann an openHAB weiterreichen könnte, z.B. über die openHAB REST API.

Immer dran denken: openHAB zu verwenden, bedeutet nicht, alles ausschließlich in openHAB zu erledigen, im Gegenteil ist openHAB eigentlich der Kleber, um viele kleine Problemlöser zu einem großen Ganzen zusammenzubringen.
openHAB interessiert lediglich, ob es etwas tun soll oder nicht (z.B. ein Licht zu schalten).
Zu prüfen, ob der Befehl überhaupt erlaubt ist, gehört nicht zu den Aufgaben von openHAB. :)

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 9. Okt 2023 01:05
von Jensemann_P
Hi und Danke für deinen Input.

Also den Reader-Teil werde ich selbst gestalten. Da Arduino also nicht endlos viel Leistung, aber ich habe schon Bibliotheken für Grundlegendes SQL gesehen. Also eher alles vom Arduino aus fertig machen und OH nur sagen welche Rule es ausführen soll?

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 9. Okt 2023 10:38
von udo1toni
Jensemann_P hat geschrieben: 9. Okt 2023 01:05 Hi und Danke für deinen Input.

Also den Reader-Teil werde ich selbst gestalten. Da Arduino also nicht endlos viel Leistung, aber ich habe schon Bibliotheken für Grundlegendes SQL gesehen. Also eher alles vom Arduino aus fertig machen und OH nur sagen welche Rule es ausführen soll?
Mein Tipp an dieser Stelle wäre, vom Arduino aus lediglich eine Stored Procedure in der SQL Datenbank anzustoßen, auf diese Weise kann der Arduino nicht angegriffen werden (im Sinne von: IDs abgreifen). Damit wäre dann auch die Frage der Leistung kein Thema, weil Du lediglich eine SQL Abfrage an die Datenbank schickst. Die Stored Procedure sendet dann den Befehl an openHAB.
Wenn Sicherheit kein Thema ist (z.B weil der Arduino nicht von außen angreifbar ist), kannst Du natürlich auch direkt vom Arduino aus die notwendigen Befehle absetzen. Eventuell wäre mqtt hier die bevorzugte Variante (weil es auf openHAB-Seite extrem einfach und mächtig einzubinden ist - Bibliotheken gibt es auch dafür).

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 9. Okt 2023 18:06
von Jensemann_P
Da stehe ich dann doch auf dem Schlauch. Wie kommt denn dann die Ausgabe der stored procedure in OH? Kann ich daraus HTTP absenden? Der Arduino selbst ist von außen nicht (bzw nur über die Pins der Wiegand-Schnittstelle) zugänglich und sitzt dann im Keller, nach außen nur eine Steuerleitung. An irgendeiner stelle muss ja an irgendeine API sowas wie "Login ok" und vlt noch fürs Protokoll welcher chip es denn war übermittelt werden. Spätestens da ist das ganze ja prinzipiell knackbar. Ist ja aber alles wenn ich erst mal Zugriff aufs LAN habe, vlt also da auch vernachlässigbar? Ich möchte die RFID nicht im Klartext stehen haben, aber am Ende kann ja auch wer Zugriff hat einfach die entsprechende Rule auch anders auslösen. Mach ich mir gerade zu viele Gedanken, wenn es eh innerhalb meines LANS ist?

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 9. Okt 2023 19:34
von udo1toni
Ja, das ist halt die Frage. Einen RFID Chip kann man mit den passenden Tools in Sekunden auslesen und auch klonen, insofern ist das vermutlich die bei weitem schwächste Stelle des ganzen Systems (was nicht bedeutet, dass Du die Finger davon lassen sollst...)
Eine Stored Procedure ist letztlich ein Script, welches in der Datenbank gespeichert ist, das kann auch weitere Befehle ausführen (z.B. einen httpCall siehe z.B. https://stackoverflow.com/questions/404 ... e-in-mysql
Sowas könnte ich mir gut in dem Zusammenhang vorstellen.

Aber wie gesagt, vielleicht braucht es das ja gar nicht und Du kannst das ganz popelig direkt auf dem Arduino lösen. Die Stored Procedure kannst Du dann auch verwenden, um einfach nur z.B. den passenden Datensatz zu einem RFID Tag abzurufen (ist das Tag bekannt, wie "heißt" das Tag, ist es im aktuellen Zeitraum berechtigt usw.) Der Arduino muss dann lediglich die ID an die Stored Procedure schicken (statt das SQL Statement selbst zu erstellen) und die Stored Procedure antwortet mit einem wie auch immer gestalteten Datensatz. Den kannst Du wiederum als JSON an ein mqtt Topic schicken, welches von openHAB überwacht wird. openHAB kann dann das Topic auswerten und die enthaltenen Daten loggen (wer hat wann versucht...) sowie die eigentliche Aktion auslösen.
Die Stored Procedure kannst Du z.B. dazu verwenden, zu verhindern, dass jemand mit einer SQL Injection Deine Datenbank angreifen kann.

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 10. Okt 2023 00:48
von Jensemann_P
Ok, das Thema klingt sehr interessant, hatte ich bisher noch nicht gebraucht und noch nicht auf dem Schirm, klingt aber nach einem sehr brauchbaren Ansatz für mein Vorhaben!

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 18. Okt 2023 16:18
von Jensemann_P
Ich wollte mich nochmal kurz zurückmelden dazu. Arduino und Ethernet-Board liegen vor. Siehe da, das Ethernet Board hat einen SD-Kartenleser. Da hier max 4-6 Karten im Umnlauf sein werden, werde ich wohl einfach die RFIDs in einer Textdatei hinterlegen und lokal auf dem Arduino gleich auswerten. Alle paar Jahre mal was an einer SD Karte von Hand ändern vs Overengineering ;-)

Re: Wie Daten Sicher speichern / SQL Zugriff aus Rules möglich?

Verfasst: 18. Okt 2023 18:12
von udo1toni
Ja, ein pragmatischer Ansatz ohne großen Aufwand :)