MySQL und vb.Net

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von xChRoNiKx.

    MySQL und vb.Net

    Ich würde gerne eine MySQL Tabelle im datagridview anzeigen, möchte aber ungern die blanken MySQL connection Daten im vb.net Code zustehen haben, wäre es sinnvoll mit vb.Net ein php login anzusteuern was bei richtigen login die MySQL daten in ein vb.net string packt und ich mir so mit der MySQL Datenbank verbinden kann?

    Wäre soetwas sinnvoll oder gibt es da Sicherheitsbedenken?
    Datenbankverbindungen sollten nicht hardcodiert im code drinnen sein.

    bei MySQL würde ich per PHP schnittstelle auf die Datenbank drauf zugreifen und die daten auch darüber abrufen lassen. gibt hier in forum eine Lib / Anleitung dazu, wie man das macht, auch wie man den Stream dann verschlüseln kann von vb.net zur php datei
    ich find so zwischengeschobenes PHP immer umständlich und fragwürdig.
    Tatsächlich leistet es nicht mehr, als was StoredProcedures auch leisten täten, nur viel effizienter. Also wenn du die Zugriffsberechtigungen auf SPs einschränkst, dann kann auf der DB ebensowenig frei floatendes Sql ausgeführt werden, als wenn du die "StoredProcedures" in Php codierst.
    Bezüglich der AnmeldeInformation ists gehupft wie gesprungen: Ob nu das Php-Login gehakt wird oder das der DB. (Wie gesagt: solange das Login keine direkten Zugriffsrechte auf Tabellen hat).

    Ich muss aber gestehen, dassich vonne Db-RechteVerwaltung keine Ahnung habe, ich weiss nur, dasses sowas gibt, und soll wohl sehr leistungsfähig sein. Aber ehe ich eine zusätzlicche "Umfüllstation" dazwischen-frickel, noch dazu in einer nicht mehr soo aktuellen Sprache, und wo ich die Daten nur noch als String geliefert bekomme....
    Da täte ich mich lieber richtig in die Db-Administration einarbeiten.

    ErfinderDesRades schrieb:


    Bezüglich der AnmeldeInformation ists gehupft wie gesprungen: Ob nu das Php-Login gehakt wird oder das der DB.


    naja, das Problem ist halt, das man zu MySql nicht wirklich eine verschlüsselte Verbindung aufbauen kann von hause aus... das musste ich schon selber feststellen, nachdem mein DB Server mit MySQL gehackt worden war. Nach der umstellung aus MSSQL und aktivierung der Verschlüsselung der verbinung und der Datenbank, habe ich das problem nicht mehr.

    von daher habe ich bei MyQL es mir angewöhnt, die abfragen immer über ein php 7.3 query laufen zu lassen, das wiederum verschlüsselt ist.

    *Vollzitat entfernt* ~NoFear23m

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

    das musste ich schon selber feststellen, nachdem mein DB Server mit MySQL gehackt worden war.


    du hattest also deine adresse, dein table, dein UID und PW im program und dann wurde es gehackt? gehackt im Sinne von dass die Daten ausgelesen wurden auf die die UID zugriff hat? Oder hattest ein Admin als UID drin?
    die zugangsdaten standen nicht im code selber drinnen. Der Datenstream wurde abgefangen, da dieser nicht verschlüsselt war. dadurch konnte dann die datenbank geknack werden und weil auf dem db-server plesk lief als verwaltungsoberfläche war es ein leichtes die dazugehörigen zugangsdaten auszulesen, den server zu hacken und ihn dann für ein DDoS auf die Telekom in Kannada zu benutzen.

    seitdem, mache ich sowas nur noch mit verschlüsselter verbindung und datenbank. sei es zu MSSQL die SSL und verschlüsselung von haus aus unterstütz oder halt per php7 und verschlüsseltem datenstream.

    Vollzitat entfernt. ~Thunderbolt

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

    Ok, ich hab aktuell gerade ein programm in entwicklung mit mysql, phpmyadmin... der server, ne dyndns adresse, die zugangsdaten sind im program. Die einstellungen bei der db sind , dass nur diese zugangsdaten ‚%‘ (also aus dem internet ist der zugang nur mit dieser uid möglich) zu meinem table hat. Die db läuft auf meinem nas... könnte mir soetwas auch passieren? Könnte man u.U. Sogar auf meine anderen Daten auf dem nas zugreifen? Die einstellungen im nas sind, dass wenn eine ip innerhalb 2 min 3x falsches kennwort eingibt wird es geblockt. Thema beuteforcr. Wie sicher ist das generell? Lg

    r0tzi schrieb:

    der server, ne dyndns adresse, die zugangsdaten sind im program


    Dann ist alles andere egal. Du gibst ja quasi jeden die Zugangsdaten. Heißt jetzt nicht das man automatisch an andere dinge kommt. Aber reicht das nicht schon das jemand
    fremdes die Zugangsdaten zu MySQL hat?

    Ich dächte du hättest das mittlerweile geändert.

    @ErfinderDesRades naja man nutzt ja häufig eine Datenbank um dinge auch rein zu schreiben. Das heißt sobald der User in MySQL die Rechte hat zu schreiben / ggf. auch zu löschen ist doch
    schon alles gegeben das jemand böses tun kann. Wenn es nur darum geht zu lesen dann ok dann würde ich selbst auch die Daten im Programm haben weil das kann man dann per Recht einstellen
    das dieser User nur lesend Zugriff hat und nichts anderes ausführen kann.

    Das dass PHP Script gehackt wird ist unwahrscheinlicher als das jemand im Quellcode die Zugangsdaten sieht. Man kann auch alles andere verwenden das nur die Requests entgegen nimmt und
    die Datenbankarbeit auf dem Server passiert.

    Nur Zugangsdaten im Programm finde ich egal wie eigentlich immer fehl am Platz. Ist das gleiche wie mit den FTP Login / SMTP Logins im Programm. Kann alles ausgelesen werden.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    zudem sollte man das Programm beim release immer durch den .net Reactor jagen für die verschlüsselung um es einen von hause aus zu erschweren den code zu entschlüsseln um so an die Syntatischen aufbau ranzukommen oder evetnuell doch hinterlegte zugangsdaten auslesen zu können.

    ich halte es mittlerweile so, das alle Programme ich bei mir in der Firma genutzt werden, nur ausgeführt werden können, wenn der benutzername und eine generierte hardware id mit dem gelcih sind die das programm abfragt, dann kann es erst gestartet werden. und da sind dann auch daten für die datenbank drinnen.

    aber sobald es um programme geht, die auf datenbänke in einem RZ oder auf einem Server zugreifen, sind diese nicht mehr im programm drinnen, sonder werden entweder per request verschlüsselt aus einer datenbnak als read-only zugriff geliefert und temporär zwschengespeichert, solange diese zu einen zugriff benötigt werden. danach werden diese wieder gelöscht.

    Generell stimme ich @xChRoNiKx zu das Zugangsdaten, egal in welcher form eigendlich nichts im code zu suchen haben. selbst in der Namespace My.Rescoures nicht....

    Drachie schrieb:

    urch den .net Reactor jagen für die verschlüsselung


    Bitte nicht. Das ist unnötig und bringt keinen Schutz. Das ganze kann immer noch schön decompiled werden. Bringt meistens nur mehr Probleme mit sich.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    kommt auf die einstellungen drauf an die man in .net reactor macht. Alles programme lassen ich mit dernötigen kriminellen energie reverse engeneeren. egal wie man es verschlüsselt.

    bis jetzt habe ich noch nie probleme damit gehabt, das nach dem durchjagen es zu fehlern gekommen ist, oder etwas nicht mehr lief. der .NET Reactor bietet vielleicht einen minimalen schutz vor scriptkiddies, sich daran versuchen.

    es ist immer noch besser als die exe nach dem Compilieren so zu verbreiten....

    Vollzitat entfernt. ~Thunderbolt

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

    MySQL unterstützt SSL-Verbindungen, somit könnte man schon mal die Transportsicherheit herstellen. Wer ohne SSL irgendwas durch die Gegend sendet ist selber Schuld.

    Wie bereits erwähnt gehören Zugangsdaten nicht in den Source Code. Eine WebAPI, sei es nun PHP oder .net (Core) sind auf jeden Fall nicht verkehrt.
    Einen MSSQL könnte man ans Active Directory koppeln und somit Trusted Connection nutzen. Bei MySQL braucht man wohl die Enterprise Variante. Oder ich finde auf die schnelle nichts, kann auch sein.

    Deine Anforderung ist bisher aber auch sehr schwammig geschrieben. Stehen den Programm und der MySQL Server im gleichen Netz? Ist die Nutzerzahl überschaubar so dass du die Nutzer einzeln als MySQL Nutzer anlegst und den Nutzern ist zuzumuten sich per User / Pass anzumelden?

    Nachtrag: @Drachie
    s ist immer noch besser als die exe nach dem Compilieren so zu verbreiten....

    Nein, nein und nochmals nein. Ein obfuskiertes Programm macht bei jedem, halbwegs, vernünftigen Virenschutz Probleme und jede IT-Security lehnt so etwas ab. Obfuskieren ist Augenwischerei
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

    Drachie schrieb:

    es ist immer noch besser als die exe nach dem Compilieren so zu verbreiten


    Warum? Was spricht denn dagegen? Ich gebe sogar mittlerweile alles nur noch OpenSource mäßig raus, warum auch nicht? Die Lizenzen regeln den Rest.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    fackt ist, jeder hat eine andere meinung zum Tehma sicherheit bei den programmen. oder wer wie die exe nachher rausgibt. ich verschüssel die als native.exe immer und habe damit bis jetzt keine probleme gabt.

    aber wie schon gesagt, jeder macht es anders.

    zurück aber jetzt zum Thema, bevor wir noch mehr abschweifen
    MySQL unterstützt SSL-Verbindungen, somit könnte man schon mal die Transportsicherheit herstellen. Wer ohne SSL irgendwas durch die Gegend sendet ist selber Schuld.


    ich benutze Maria DB per nas über phpmyadmin, wie stelle ich das da denn ein?

    bei mir sind die user überschaubar und das programm wird vorerst nicht ins internet kommen.

    Was wäre denn, sagen wir mal ich füge 2 textboxen ein, in denen der user die login daten eingeben muss die ich ihm dann gebe... sollte das programm dann irgendwohin geraten warum auch immer, kann der hacker ja nichts machen, da die login daten nirgends zu sehen sind. das wäre doch mal eine alternative oder? diese könnte ich auch regelmäsig ändern und den usern bescheid geben....
    Ja, den User sich anmelden lassen, kann eine Option sein.

    PHPmyAdmin ist nur die Verwaltungsoberfläche, keine zwingende Komponente.

    Für die Verbindung siehe MariaDB KnowledgeBase
    mariadb.com/kb/en/library/secure-connections-overview/
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

    xChRoNiKx schrieb:

    @ErfinderDesRades naja man nutzt ja häufig eine Datenbank um dinge auch rein zu schreiben. Das heißt sobald der User in MySQL die Rechte hat zu schreiben / ggf. auch zu löschen ist doch
    schon alles gegeben das jemand böses tun kann. Wenn es nur darum geht zu lesen dann ok dann würde ich selbst auch die Daten im Programm haben weil das kann man dann per Recht einstellen
    das dieser User nur lesend Zugriff hat und nichts anderes ausführen kann.
    Tja, ich verstehe nicht viel von Db-Rechte-Verwaltung.
    Ich hätte gedacht, der User bekommt Rechte, um bestimmte StoredProcedures aufzurufen, sonst nix.
    Ob die SPs dann Abfragen darstellen oder Einträge in die Db ausführen, liegt daran, wie sie implementiert sind.

    Ist das nicht möglich, die Rechte eines Users, oder einer Gruppe in diesem Sinne zu konfigurieren?

    ErfinderDesRades schrieb:

    Ist das nicht möglich, die Rechte eines Users, oder einer Gruppe in diesem Sinne zu konfigurieren?


    Soweit ich weiß ist das bei MySQL nicht möglich. Man kann den Usern zwar verschiedene Berechtigungen geben.
    Aber sobald der User dann "Insert" machen kann kann er das halt. Oder halt Delete. Siehe hier mal nen Screenshot zur Rechteverwaltung im PhpMyAdmin:
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Jup, einem User unter MySQL das Recht EXEC zu geben ist einfach, die Prozeduren müssen jedoch dann auch mit dem User angelegt worden sein.
    Wenn man auf Prozeduren und Funktionen anderer User zugreifen will/muss, braucht man SUPER. Damit hätte der User wieder volle Berechtigungen auf alles.

    Wobei mit MySQL 8.0 Dynamische Privilegien eingeführt wurden, mit dem man nicht mehr komplett SUPER erteilen muss.