Onlinedatenbank erstellen und aus vb.net Projekt darauf zugreifen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Onlinedatenbank erstellen und aus vb.net Projekt darauf zugreifen

    Hallo,

    Ich habe eine VB.NET Desktop Applikation und möchte eine Online-Datenbank erstellen und verknüpfen.

    Die Datenbank soll Kundenspezifische Daten enthalten und die Applikation soll auf diese Daten zugreifen können um gewisse Daten und Vorgaben zu prüfen.

    In dem Bereich kenne ich mich NULL aus.

    Wie erstelle ich eine Onlinedatenbank?
    Wie kann ich per VB-Code auf diese zugreifen?

    LG
    Je nachdem, was du mit "Online-Datenbank" meinst, kann das eine mySQL-Datenbank sein, die öffentlich aufrufbar ist oder halt nicht (was eher gängig ist).

    Wenn es eine mySQL Datenbank ist:

    Quellcode

    1. $ sudo mysql
    2. > create database DB_NAME;
    3. > use DB_NAME;
    4. > create table TB_NAME ...

    usw.

    Du brauchst dafür aber auch einen Provider.
    Dafür brauchst du auch einen Provider, oder du stellst eines deiner eigenen Geräte öffentlich ins Netz, z.B. mit DynDNS.




    Je nachdem was du brauchst, solltest du überlegen, dafür eine REST-API zu bauen, z.B.

    So mache ich das bei meinen Kunden auch, die eine online-Datenbanklösung haben wollen. Die kriegen ein kleines Webspace mit einer Web-API (REST), die die Datenbank-Sachen übernimmt.
    Für "low-level" Kram biete ich dann eine Verwaltungsoberfläche.
    Hier aus dem Forum nutzt der ein oder andere auch sowas bei/von mir :D

    Eine öffentlich erreichbare Datenbank-Instanz ist immer ein Sicherheitsrisiko - genau so auch, wenn du als Laie eines deiner Geräte öffentlich ins Netz stellst, ohne gewisse Vorkehrungen zu treffen.

    Schau online nach Angeboten, die dir einen guten Preis machen und den Funktionsumfang und die Sicherheit bieten, die du brauchst.
    Wenn es mit REST-API ist, kannst du eine Gegenstelle in .NET bauen.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Am einfachsten mit einer selbst geschriebenen API.
    Setzt natürlich auch voraus, dass man rund um die Online Datenbank auch ein Programmiergerüst aufbauen kann (z.B. PHP /ASP).

    Dann einfach per API Aufruf die gewünschten Daten von der Datenbank holen.
    Da kann man dann auch alle wichtigen Sicherheitsparameter (z.B. Zugriffstokens oder Verschlüsselungen) etc. verwenden um auch dem Datenschutz zu entsprechen.
    Liebe Grüße
    Roland Berghöfer

    Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
    Die Applikation von mir, welche bei Kunden Weltweit installiert ist, soll auf diese Datenbank zugreifen können um Daten abzufragen. Die Sicherheit muss hier sehr groß sein. Was bedeutet in diesem Kontext "öffentlich"?

    Also wo und wie richte ich eine MySQL Datenbank ein?
    Wenn du Sicherheit groß schreiben möchtest, dann kannst du die Datenbank nicht öffentlich aufrufbar machen. Das wirst du wrappen müssen, nämlich mit einer API.

    Was du dafür brauchst, ist ein Provider/einen Server im Internet. Linux ist da das Mittel der Wahl.
    Für mein Unternehmen und Kunden setze ich auf Debian und Derivate davon, ist aber mit allen Distros ähnlich.

    Installation:

    Quellcode

    1. $ sudo apt install mysql-server mysql-client


    Einrichtung:
    S.o.

    Wenn du dich aber damit nicht auskennst, lass es besser machen.
    Da gehört noch einiges mehr zu, als nur einen Server aufsetzen - gerade wenn (Privat-)Kundendaten dort liegen (sollen), ist die Sicherheit des Systems exorbitant wichtig!

    Ist der mySQL-Server eingerichtet, ist es trivial einen User mit Datenbank und Tabellenstruktur aufzusetzen. Das ist eine Sache von wenigen Minuten.

    Die API wäre dann natürlich aufwändiger. Ggf. mit Rechtesystem, je nach Benutzer und Abfragen müssen natürlich dann soweit abstrahiert werden, dass eine sinnvolle Struktur dahinterstehen kann.
    Ideellerweise mit .net-API, damit deine Applikation das ohne großen Aufwand einbinden kann.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.

    DragsTrail schrieb:

    Die Applikation von mir, welche bei Kunden Weltweit installiert ist, soll auf diese Datenbank zugreifen können um Daten abzufragen. Die Sicherheit muss hier sehr groß sein. Was bedeutet in diesem Kontext "öffentlich"?

    Also wo und wie richte ich eine MySQL Datenbank ein?
    Scheinbar bist du noch ganz am Anfang deiner Karriere. Daher hört sich das alles nicht so an, als das du es selbst machen solltest.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @mrMo Das widerspricht doch deinen Slogan! :) Server, etc kenn ich mich bis jetzt überhaupt nicht aus.

    @siycah Mir ist klar das du damit Geld verdienst.

    Die Frage ist ob man mir helfen kann und will!

    1. Provider / Server? Welcher, wie installiere ich eine Datenbank auf diesen Server und wie kann ich per VB.NET Code darauf zugreifen?

    2. API ==> Per Code auf die Datenbank zugreifen! Verstehe ich das richtig?

    Die Datenbank selber hat pro Kunde einen einzigen Eintrag und das ist ein String welcher verschlüsselt ist.
    @DragsTrail Darf ich dir eine Gegenfrage stellen?
    Du weißt das ein Auto ein Motor hat, richtig? Und verstehst grob wie der Funktioniert?
    Wenn es dort Probleme gibt, würdest du den selbst auseinandernehmen, auch wenn du keine Ahnung von den einzelnen Teilen hast/dein Hobby-KFZ'ler anrufen und fragen ob der dir die Schritte aufschreibt oder fährst du zur Werkstatt?

    Klar, könnte man versuchen dir hier jeden einzeln Punkt zu erklären, aber damit könntest du fast ein Buch füllen und das ist nicht zielführend.

    DragsTrail schrieb:

    Mir ist klar das du damit Geld verdienst.


    Darauf will ich nicht hinaus, ich teile hier lediglich meine Erfahrung mit, was ich nutze und womit ich gute Erfahrungen mache.

    DragsTrail schrieb:

    Provider / Server? Welcher

    Ja, das musst du für dich herausfinden. Hab ich dir bereits geschrieben. Die meisten Lösungen, die es fertig im Netz gibt sind mit einem "Root-Server" verbunden, oder ein Webspace, wo du eine Datenbank mitgeliefert bekommst.
    Wenn ich dir hier einen Dienstleister nenne und der deinen Vorstellungen nicht entspricht, bin ich der Doofmann.

    DragsTrail schrieb:

    API ==> Per Code auf die Datenbank zugreifen! Verstehe ich das richtig?

    Korrekt.

    API schreiben (lassen), was für dich auf die Datenbank zugreift und die Daten zurückliefert. Für sowas nutze ich gerne PHP mit einem MVC-Framework. Geht schnell und ist (relativ) einfach und bietet viele Funktionen, die der Sicherheit dienen.
    Dann eine .net-API (Bibliothek) bauen, was dann auf die API zugreift. Dann ist es nicht allzu sehr in deinem Programm reingewurstet und kann wiederverwendet werden.

    DragsTrail schrieb:

    Die Datenbank selber hat pro Kunde einen einzigen Eintrag und das ist ein String welcher verschlüsselt ist.

    Welche Daten genau drinstehen ist erstmal irrelevant. Das kommt dann, wenn du die API implementierst und Daten zurücklieferst.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Ok Jungs, so kommen wir nicht weiter! Weil von Grund auf alles zu lernen macht für mich keinen Sinn.

    Vielleicht hab ich das ganze auch falsch rüber gebracht. Es war nie meine Intension das Zeug selbst zu Programmieren. Ich brauch einfach eine Lösung!

    Heute bin ich mal auf das Microsoft Azure SQL gestoßen. Ist für mich gratis bis 100000Sec./Monat ( 69.4h / Monat ) Zugriffszeit. Super für den Anfang. Kann man einfach erweitern.
    Also hab die DB erstellt mit einer Vorlage. Hab auch das Azure Data Studio runtergeladen und die DB verknüpft.

    Könnte mir bitte jemand ein Code Beispiel für VB.NET geben wie ich auf diese Azure SQL Datenbank jetzt per Code zugtreife und Sachen auslesen und ändern kann?

    Dann sind wir schon fast am Zeil. :D
    Der Kollege hier hat's ziemlich gut zusammengefasst.

    Greife NICHT direkt auf die Datenbank zu!

    Du hast hier bei den ganzen Antworten nicht zugehört. Lass' dir eine API bauen, die das für dich erledigt.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Doch ich hab dich schon verstanden!
    Stand: DB ist da. Ich kann jetzt auch per Code alles mit der DB machen!

    So jetzt reden wir über die API! :D

    Ist es möglich ein Code-Beispiel zu bekommen?

    Die API soll ein separates Programm sein zu meiner Applikation? Die Applikation ist auf den Kunden-PC´s!
    Und die API soll wo sein?

    Verstehe ich das richtig: Meine APP sendet an die API, diese ließt die DB aus und die API sendet zu meiner APP diese Daten zur Prüfung? Oder soll die API die Prüfung machen und ein Boolean an meine APP senden?
    Da du dich für Azure (MS) SQL entschieden hast, wirst du wohl auf der gleichen Plattform eine Web-Anwendung bauen müssen.

    Wie du das machst, obliegt wieder dir. Das musst du wissen und entscheiden. Du kannst eine VM aufsetzen und darauf wiederum etwas bauen, oder du nutzt Azure Functions.
    Es scheint mir, als hättest du dich nicht eingelesen, was du alles noch beachten musst.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Hallo, bevor ich etwas vorschlage, wäre es wichtig zu wissen, wie sicherheitskritisch das ganze ist. Denn entweder bist du von der Art: wie bediene ich ein Flugzeug ohne irgendetwas über Avionik gelesen zu haben oder wie benutze ich einen Löffel ohne Metallkunde studiert zu haben. Eigentlich ist deine Anforderung ultraprimitiv und seit 30 Jahren millionenfach umgesetzt. Leider auch alzu oft falsch. Bitte beschäftige dich mal mit dem Begriff SQL Injektion. Das peinliche ist, dass das immer noch eins der häufigten Fehler ist. Wenn du das schon zu umständlich findest, verwende einen Baukastensystem von irgendeinem Anbieter (wie auch von siycah vorgeschlagen)
    @siycah
    Entschieden habe ich mich nicht. Ich habe nach Möglichkeiten gesucht und diese gefunden.

    @Coldfire
    Ich bin der Avionik-Typ. In der DB befinden sich verschlüsselte Strings welche eine bestimmte Information über meine Applikation enthält, jedoch keine Kundendaten an sich. Jede Applikation hat Ihren eigenen DB Eintrag.
    Die Applikationen befinden sich auf den Kundenrechnern und diese sind keine Privatpersonen sondern namhafte Industrieunternehmen. Die APP holt sich also Ihren individuellen String aus der DB und überprüft Ihn auf Gültigkeit.

    Ich verstehe nicht inwiefern diese SQL-Injektion hier relevant ist. Sollte man die Abfrage abfangen können und die DB Daten auslesen, dann kann mit denen so und so niemand etwas anfangen.
    Wenn jemand die DB hackt und diese löscht oder die Daten ändert ist das wieder eine andere Geschichte.

    Die Frage ist nur ob das jetzt bei AZURE SQL so leicht möglich ist? Gestern hatte ich eine Unterhaltung mit der IT meiner aktuellen Firma, mit immerhin 4800 Mitarbeitern Weltweit und einen Umsatz von 3.4 Milliarden pro Jahr. Die benützen auch MS AZURE SQL. Wie schlecht kann den diese Lösung sein?

    Könnte mir bitte jemand im Detail erklären was es mit dieser API auf sich hat? Wie soll die Kommunikation zwischen meiner APP, API und DB jetzt aussehen?

    DragsTrail schrieb:

    Gestern hatte ich eine Unterhaltung mit der IT meiner aktuellen Firma
    Warum macht die IT ihren Kram denn dann nicht gleich selbst?

    Bei Warnungen vor Sql-Injektion geht man davon aus, dass der Kunde selbst auf die Datenbank zugreift.
    Was du beschreibst hört sich nun eher danach an, als greift die Software, die der Kunde nutzt auf die Datenbank zu, ohne, dass der Kunde was davon mitkriegt. Da ist Sql-Injektion (zumindest was generell dazu diskutiert wird) nicht möglich. Auch sind dann die anderen Bedenken geschmälert, wenn der Kunde nicht sagen kann "zeig mir mal die Daten", dann kann er auch keine Daten sehen, die er nicht sehen soll.

    DragsTrail schrieb:

    Wie soll die Kommunikation zwischen meiner APP, API und DB jetzt aussehen?
    Eine Anwendung agiert als Server, die liegt bei dir. Eine Anwendung agiert als Client, die liegt bei den Kunden. Der Client funkt den Server an. Der Server macht die DB-Abfrage und gibt dann Antwort an den Client. Der Server entscheidet welche Sachen erlaubt sind und welche nicht, entsprechend gehen so keine Daten raus die nicht raus sollen.
    SQL Injektion ist immer dann vorstellbar, wenn Usereingaben ungeprüft in den Programmablauf einfließen dürfen. Eigentlich etwas, was selbstverständlich verhindert werden sollte. Aber eine Unachtsamkeit ist genug für volle Kontrolle. Je mehr potenziellen Impakt dein Programm hat, um so mehr Zeit werden Leute investieren, da eine Schwachstelle zu finden. Die Übernahme mehrerer Firmen bringt das in den Millionenbereich. Also gute Versicherung abschließen.
    Nachtrag bzgl Azure: cvedetails.com/product-search.php?vendor_id=26&search=azure

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Coldfire“ ()

    DragsTrail schrieb:

    In der DB befinden sich verschlüsselte Strings welche eine bestimmte Information über meine Applikation enthält, jedoch keine Kundendaten an sich. Jede Applikation hat Ihren eigenen DB Eintrag.
    Klingt für mich wie eine Lizenzüberwachung. Richtig?

    DragsTrail schrieb:

    Die Applikationen befinden sich auf den Kundenrechnern und diese sind keine Privatpersonen sondern namhafte Industrieunternehmen
    Da sehe ich das Problem, dass ggf. die Firewall des Kunden einen Zugriff auf deinen SQL-Server blockieren könnte.
    Egal ob per SQL oder per API. Am ehesten könnte noch ein API-Zugriff über Port 443 frei zugänglich sein. SQL ist eher unwahrscheinlich.
    Du solltest zumindest in die Installationsvoraussetzungen eine entsprechende Portfreischaltung aufnehmen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --