Zugriff auf MySql Server
Hallo zusammen,
ich bin momentan dabei mich in die Datenbankmaterie einzuarbeiten. Dazu habe ich einen Server bereit gestellt bekommen der auf Windows Server 2019 läuft. Darauf habe ich nun MySQL 8.0 installiert und eine Datenbank erstellt.
In Zukunft möchte ich nun eine Anwenung in C# schreiben die mit dieser Datenbank arbeiten soll. Da ich allerdings recht neu bin Datenbanken zu administrien stellt sich mir die Frage, wie komme ich an die Verbindungsdaten, womit ich später die Connection zwischen dem Programm und der DB aufbaue.
Bzw. Wie kann ich prüfen, das ich eine Verbindung mit dem Server und der DB von meinem Laptop aus hergstellt habe?
Gebe ich auf dem Server über die Eingabeaufforderung ipconfig ein, sehe ich die IP Adresse des Servers, allerdings bin ich mir nicht sicher ob dies reicht.
Klar, für die DB an sich brauche ich dann noch den User und Kennwort, aber dazu muss ja erstmal die Verbindung hergestellt werden können.
Das Fachbuch womit ich mich befasse, stellt leider nur den lokalen Einsatz und Einbindung der DB in ein C# Programm vor, aber nicht, wenn die DB auf einem Server läuft.
Vielen Dank im Voraus.
Nachtrag: Der Server befindet sich in einem Firmennetzwerk. Da werde ich mir wohl die Verbindungsdaten vom IT Dienstleister geben lassen müssen oder?
Nachtrag2: Über das Tool "Server-Manager" sehe ich unter anderem den Computernamen, Domäne und IP Adresse.
ich bin momentan dabei mich in die Datenbankmaterie einzuarbeiten. Dazu habe ich einen Server bereit gestellt bekommen der auf Windows Server 2019 läuft. Darauf habe ich nun MySQL 8.0 installiert und eine Datenbank erstellt.
In Zukunft möchte ich nun eine Anwenung in C# schreiben die mit dieser Datenbank arbeiten soll. Da ich allerdings recht neu bin Datenbanken zu administrien stellt sich mir die Frage, wie komme ich an die Verbindungsdaten, womit ich später die Connection zwischen dem Programm und der DB aufbaue.
Bzw. Wie kann ich prüfen, das ich eine Verbindung mit dem Server und der DB von meinem Laptop aus hergstellt habe?
Gebe ich auf dem Server über die Eingabeaufforderung ipconfig ein, sehe ich die IP Adresse des Servers, allerdings bin ich mir nicht sicher ob dies reicht.
Klar, für die DB an sich brauche ich dann noch den User und Kennwort, aber dazu muss ja erstmal die Verbindung hergestellt werden können.
Das Fachbuch womit ich mich befasse, stellt leider nur den lokalen Einsatz und Einbindung der DB in ein C# Programm vor, aber nicht, wenn die DB auf einem Server läuft.
Vielen Dank im Voraus.
Nachtrag: Der Server befindet sich in einem Firmennetzwerk. Da werde ich mir wohl die Verbindungsdaten vom IT Dienstleister geben lassen müssen oder?
Nachtrag2: Über das Tool "Server-Manager" sehe ich unter anderem den Computernamen, Domäne und IP Adresse.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 484540
Url: https://administrator.de/contentid/484540
Ausgedruckt am: 05.11.2024 um 17:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo,
probier mal Dein Glück mit Heidi.
https://www.heidisql.com/
Dazu brauchst Du nur die IP, Benutzername und Kennwort.
Stefan
probier mal Dein Glück mit Heidi.
https://www.heidisql.com/
Dazu brauchst Du nur die IP, Benutzername und Kennwort.
Stefan
Hallo,
grundlegend hoffe ich zunächst, der Server steht nicht irgendwo im Internet ... Thema Serverabsicherung...
Wenn die Anwendung, mit der eine Verbindung zur Datenbankaufgebaut werden soll, nicht auf dem Server läuft, so muss die externe Erreichbarkeit des MySQL-Datenbankdienstes aktiviert werden.
Zunächst muss mit dem Admin Account der Datenbank (mit dem auch die Datenbank angelegt wurde...) ein separater Account für die Datenbank eingerichtet und berechtigt werden. mit phpMyAdmin z.B. ... Thema Datenbanksicherheit ...
Anschließend kann mit den Zugangsdaten und der IP Adresse des Servers eine Verbindung augebaut werden.
Beispiel gibts hier:
Beispiel C# mysql
Insgesamt hört sich aber alles nach der ersten Datenbankanwendung / -programmierung an. Auf jedenfall erstmal im lokalen Netz testen und wenn alles läuft, dann auf einen gehärteten Server (Sicherheit) übertragen.
Warum MySQL auf einem MS Server 2019?
Ansonsten benötigen wir mehr Infos zur Umgebung und zum Projekt selbst.
Greetz,
thejoker2305
grundlegend hoffe ich zunächst, der Server steht nicht irgendwo im Internet ... Thema Serverabsicherung...
Wenn die Anwendung, mit der eine Verbindung zur Datenbankaufgebaut werden soll, nicht auf dem Server läuft, so muss die externe Erreichbarkeit des MySQL-Datenbankdienstes aktiviert werden.
Zunächst muss mit dem Admin Account der Datenbank (mit dem auch die Datenbank angelegt wurde...) ein separater Account für die Datenbank eingerichtet und berechtigt werden. mit phpMyAdmin z.B. ... Thema Datenbanksicherheit ...
Anschließend kann mit den Zugangsdaten und der IP Adresse des Servers eine Verbindung augebaut werden.
Beispiel gibts hier:
Beispiel C# mysql
Insgesamt hört sich aber alles nach der ersten Datenbankanwendung / -programmierung an. Auf jedenfall erstmal im lokalen Netz testen und wenn alles läuft, dann auf einen gehärteten Server (Sicherheit) übertragen.
Warum MySQL auf einem MS Server 2019?
Ansonsten benötigen wir mehr Infos zur Umgebung und zum Projekt selbst.
Greetz,
thejoker2305
DBeaver ist ein ebenso sinnvolles Tool dafür !
https://www.heise.de/select/ct/2018/23/1541818708626082
https://dbeaver.io
https://www.heise.de/select/ct/2018/23/1541818708626082
https://dbeaver.io
Hallo,
dann wäre der nächste Schritt zu prüfen, ob und wie der "Datenbankserver" von deinem Rechner und den Rechnern, auf denen später die Anwendung laufen soll erreicht werden kann.
Unabhängig von der Aufgabenstellung WPF-Anwendung ... wäre eine PHP / MySQL Lösung denkbar? Der Vorteil: die Datenbankverbindung erfolgt dann nur lokal auf dem Server vom PHP-Skript zur Datenbank.
Das modulare Konzept und die Erweiterungsmöglichkeiten wäre dann auch gegeben. Welches Zeitfenster ist für das Projekt anvisiert? Genügt die Zeit um sich in PHP, MySQL und ggf. Bootstrap zur Gestaltung einzulesen? Sind Vorkenntnisse vorhanden?
Greetz,
thejoker2305
dann wäre der nächste Schritt zu prüfen, ob und wie der "Datenbankserver" von deinem Rechner und den Rechnern, auf denen später die Anwendung laufen soll erreicht werden kann.
Unabhängig von der Aufgabenstellung WPF-Anwendung ... wäre eine PHP / MySQL Lösung denkbar? Der Vorteil: die Datenbankverbindung erfolgt dann nur lokal auf dem Server vom PHP-Skript zur Datenbank.
Das modulare Konzept und die Erweiterungsmöglichkeiten wäre dann auch gegeben. Welches Zeitfenster ist für das Projekt anvisiert? Genügt die Zeit um sich in PHP, MySQL und ggf. Bootstrap zur Gestaltung einzulesen? Sind Vorkenntnisse vorhanden?
Greetz,
thejoker2305
NACHTRAG:
Bezüglich der Batch-"Jobs".
Eventuell mal Robotask ansehen.
- komfortabler als die Windows Aufgabenplanung
- Dateikopieren / umbennen / verschieben
- Jobausführung nach Scheduler oder Event (Datei wird in Verzeichnis gelegt)
- SQL Querys als Ziel oder Quelle für Jobausführungen oder das Logging.
Greetz,
thejoker2305
Bezüglich der Batch-"Jobs".
Eventuell mal Robotask ansehen.
- komfortabler als die Windows Aufgabenplanung
- Dateikopieren / umbennen / verschieben
- Jobausführung nach Scheduler oder Event (Datei wird in Verzeichnis gelegt)
- SQL Querys als Ziel oder Quelle für Jobausführungen oder das Logging.
Greetz,
thejoker2305
Hallo,
Wäre doch auch mit ASP.NET, JavaEE usw. doch auch möglich. Voraussetzung ist natürlich, dass der Applikationsserver bzw. der Webserver mit der Anwendung auf dem selben Server läuft wie die DB. Für Entwicklung oder zum Testen wäre das noch in Ordnung. In der produktiven Umgebung würde ich aber eher schauen die Dienste zu trennen. Der DB Server sollte ohnehin nicht von extern erreichbar sein.
Ich persönlich würde eher auf Mysql Workbench oder ein ähnliches Tool für die Verwaltung setzen als auf phpmyadmin. Denn für letzteres braucht es einen Webserver und die phpmyadmin Anwendung muss zusätzlich gepflegt und abgesichert werden.
Viele Grüße
wäre eine PHP / MySQL Lösung denkbar? Der Vorteil: die Datenbankverbindung erfolgt dann nur lokal auf dem Server vom PHP-Skript zur Datenbank.
Wäre doch auch mit ASP.NET, JavaEE usw. doch auch möglich. Voraussetzung ist natürlich, dass der Applikationsserver bzw. der Webserver mit der Anwendung auf dem selben Server läuft wie die DB. Für Entwicklung oder zum Testen wäre das noch in Ordnung. In der produktiven Umgebung würde ich aber eher schauen die Dienste zu trennen. Der DB Server sollte ohnehin nicht von extern erreichbar sein.
Ich persönlich würde eher auf Mysql Workbench oder ein ähnliches Tool für die Verwaltung setzen als auf phpmyadmin. Denn für letzteres braucht es einen Webserver und die phpmyadmin Anwendung muss zusätzlich gepflegt und abgesichert werden.
Viele Grüße
Dem stimme ich zu
Zitat von @140770:
Hallo,
Wäre doch auch mit ASP.NET, JavaEE usw. doch auch möglich. Voraussetzung ist natürlich, dass der Applikationsserver bzw. der Webserver mit der Anwendung auf dem selben Server läuft wie die DB. Für Entwicklung oder zum Testen wäre das noch in Ordnung. In der produktiven Umgebung würde ich aber eher schauen die Dienste zu trennen. Der DB Server sollte ohnehin nicht von extern erreichbar sein.
Ich persönlich würde eher auf Mysql Workbench oder ein ähnliches Tool für die Verwaltung setzen als auf phpmyadmin. Denn für letzteres braucht es einen Webserver und die phpmyadmin Anwendung muss zusätzlich gepflegt und abgesichert werden.
Viele Grüße
Hallo,
wäre eine PHP / MySQL Lösung denkbar? Der Vorteil: die Datenbankverbindung erfolgt dann nur lokal auf dem Server vom PHP-Skript zur Datenbank.
Wäre doch auch mit ASP.NET, JavaEE usw. doch auch möglich. Voraussetzung ist natürlich, dass der Applikationsserver bzw. der Webserver mit der Anwendung auf dem selben Server läuft wie die DB. Für Entwicklung oder zum Testen wäre das noch in Ordnung. In der produktiven Umgebung würde ich aber eher schauen die Dienste zu trennen. Der DB Server sollte ohnehin nicht von extern erreichbar sein.
Ich persönlich würde eher auf Mysql Workbench oder ein ähnliches Tool für die Verwaltung setzen als auf phpmyadmin. Denn für letzteres braucht es einen Webserver und die phpmyadmin Anwendung muss zusätzlich gepflegt und abgesichert werden.
Viele Grüße
Zitat von @Pat.bat:
Wie würde dann auf auf die Applikation zugegriffen werden? Müsste man sich dazu eine Domain sichern und per url die Application aufrufen oder wie wird das normalerweise gehandhabt.
Wie würde dann auf auf die Applikation zugegriffen werden? Müsste man sich dazu eine Domain sichern und per url die Application aufrufen oder wie wird das normalerweise gehandhabt.
Du meinst, wie die Applikation auf die DB zugreifen kann? Der Zugriff erfolgt über das Netzwerk. Es gibt dazu bereits eine fertige Library.
Du fügst die MySQL Library dem Projekt hinzu z.B. über NuGet:
https://www.nuget.org/packages/MySql.Data/
Hier gibt es ein entsprechendes Tutorial zu der Library:
https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-intro ...
Das kommt auf die Applikation nun drauf an. Handelt es sich um eine Webanwendung, dann ruft der Anwender die Anwendung per Browser auf. Wenn es sich um eine Desktop Anwendung handelt, dann muss der Anwender diese erstmals auf seinem Rechner installieren und startet diese lokal. Die meisten Desktop Anwendungen, welche Daten von einer Datenbank oder einer anderen externen Quelle beziehen, bauen anschließend eine Verbindung zu einem Webservice auf.
Aber das musst du als Entwickler eigentlich wissen.
Aber das musst du als Entwickler eigentlich wissen.
Auf deine Fragen gehe ich später ein, erst mal grundsätzlich zu deinem Anliegen.
Desktop-Anwendung
Wenn du eine Desktop-Anwendung entwickelst und die sich direkt mit der DB verbindet (Beispiellink von @TheJoker2305), liegen die Zugangsdaten beim User. Mit vergleichsweise wenig Aufwand ist es dadurch möglich, weit mehr Rechte zu erhalten als der User haben sollte. Außerdem steht der DB-Server frei im Netz.
Beides sicherheitstechnisch sehr schlecht, daher macht man das in der Regel nicht sondern verwendet eine Middleware. Oft ist das eine HTTP-API. Der User authentifiziert sich meist gegen diese API und sie stellt dann sicher, dass nur diejenigen Aktionen durchgeführt werden, wozu er berechtigt ist.
Versus Web-Anwendungen
Auf der Basis gleich eine Web-Applikation zu bauen, ist in der Regel kein großer Mehraufwand. Dafür sind Web-Anwendungen flexibler (plattformunabhängig), müssen nicht deployt werden und lassen sich leicht zentral aktualisieren. Es empfiehlt sich daher, bevorzugt auf Web-Apps zu setzen. In vielen Fällen ist das möglich. Ausnahmen gibt es natürlich auch hier. Beispielsweise lässt sich ein Tool zum Erstellen/Bearbeiten von Screenshots schlecht vollständig im Web abbilden.
Sprache/Framework
Grundsätzlich kann man das ganze mit so ziemlich jeder Sprache und Framework für Web-Backends umsetzen. Ich habe schon mehrere Sprachen und Frameworks genutzt und würde dir empfehlen, bei C# zu bleiben. Die Sprache ist durch starke typisierung weniger fehleranfällig als beispielsweise PHP/JS. Das alte ASP.NET würde ich nicht mehr nutzen. Stattdessen lieber ASP.NET Core: Plattformunabhängig (brauchst kein proprietäres Windows mehr), schneller (sogar schneller als NodeJS) und modern mit Konzepten wie z.B. Dependency Injection. Außerdem wesentlich flexibler, kann mit einem kleinen Webserver überall laufen (auch auf modernen Stacks wie Docker/k8s). Keine oft unnötige Komplexität mehr durch einen fetten IIS Webserver (notwendig für das alte ASP.NET).
Generall geht es dabei aber gar nicht so sehr um deine Infrastruktur, die du jetzt hast. Sondern das Anwendungsdesign. Es ist gängig und legitim, dass z.B. in Entwicklungsumgebungen alles auf der gleichen Maschine läuft. Man sollte DB und Applikation aber nicht unnötig fest miteinander verknüpfen. Sprich z.B. nicht den DB-Host hartkodiert auf localhost setzen, sondern in eine Variable der Konfigurationsdatei auslagern. Wenn du Host, Port, User und Passwort in deiner Config hast (oder alternativ einen ConnectionString), kann dein Datenbankserver problemlos woanders stehen.
Entwickeln auf einem Server?! Das ist keine gute Idee. Ein Server sollte Applikationen bereitstellen und am besten so minimal mit Software bestückt sein, wie möglich. Zum an der Applikation rumbasteln gibt es Workstations. Wenn du richtig sauber entwickelst, deployst du auch von da niemals direkt auf ein Produktivsystem. Sondern hast mindestens einen Dev/Testserver dazwischen. Je nach Größe/Relevanz der Software sogar mehrere (z.B. Dev + Quality, mehrere Testsysteme etc). Das ist vor allem für den Anfang sicher etwas overkill. Aber wenigstens 2 Systeme (lokal Entwickeln + Prod Server) solltest du schon MINDESTENS haben, um halbwegs vernünftig entwickeln zu können.
Normal hast du eine Domain oder zumindest Subdomain. In Firmen gibt es i.d.R. einen internen DNS-Server. Der löst dir dann irgend eine TLD auf (z.B. company.internal). Dort einen A-Record deineapp.company.internal auf den Zielserver, und schon kommen alle MA drauf. Abzuklären ist, ob die Anwendung nur firmenintern bereitgestellt werden soll. Falls auch im Internet, müsste man sich da entsprechend der Infrastruktur Gedanken machen, ob in der DMZ ein Proxy existiert etc.
Bei einer Webanwendung (z.B. mit ASP.NET Core) greifen die User dann einfach auf deineapp.company.internal zu. Fürs Verständnis: Falls du eine klassische WPF oder auch WinForms-Anwendung entwickeln würdest, wäre das auch so. Dann würde auf deineapp.company.internal die Middleware laufen. Statt kompletter HTML-Seiten würde die dann eben nur Daten (XML, JSON oder so was) zurückgeben, die von der Desktop-Applikation entsprechend in ihrer GUI aufbereitet bzw. in der Anwendungslogik weiterverarbeitet werden.
Desktop-Anwendung
Wenn du eine Desktop-Anwendung entwickelst und die sich direkt mit der DB verbindet (Beispiellink von @TheJoker2305), liegen die Zugangsdaten beim User. Mit vergleichsweise wenig Aufwand ist es dadurch möglich, weit mehr Rechte zu erhalten als der User haben sollte. Außerdem steht der DB-Server frei im Netz.
Beides sicherheitstechnisch sehr schlecht, daher macht man das in der Regel nicht sondern verwendet eine Middleware. Oft ist das eine HTTP-API. Der User authentifiziert sich meist gegen diese API und sie stellt dann sicher, dass nur diejenigen Aktionen durchgeführt werden, wozu er berechtigt ist.
Versus Web-Anwendungen
Auf der Basis gleich eine Web-Applikation zu bauen, ist in der Regel kein großer Mehraufwand. Dafür sind Web-Anwendungen flexibler (plattformunabhängig), müssen nicht deployt werden und lassen sich leicht zentral aktualisieren. Es empfiehlt sich daher, bevorzugt auf Web-Apps zu setzen. In vielen Fällen ist das möglich. Ausnahmen gibt es natürlich auch hier. Beispielsweise lässt sich ein Tool zum Erstellen/Bearbeiten von Screenshots schlecht vollständig im Web abbilden.
Sprache/Framework
Grundsätzlich kann man das ganze mit so ziemlich jeder Sprache und Framework für Web-Backends umsetzen. Ich habe schon mehrere Sprachen und Frameworks genutzt und würde dir empfehlen, bei C# zu bleiben. Die Sprache ist durch starke typisierung weniger fehleranfällig als beispielsweise PHP/JS. Das alte ASP.NET würde ich nicht mehr nutzen. Stattdessen lieber ASP.NET Core: Plattformunabhängig (brauchst kein proprietäres Windows mehr), schneller (sogar schneller als NodeJS) und modern mit Konzepten wie z.B. Dependency Injection. Außerdem wesentlich flexibler, kann mit einem kleinen Webserver überall laufen (auch auf modernen Stacks wie Docker/k8s). Keine oft unnötige Komplexität mehr durch einen fetten IIS Webserver (notwendig für das alte ASP.NET).
Zitat von @Pat.bat:
Allerdings habe ich nur einen Server bekommen, also das zukünftige trennen der Anwedung und DB sieht eher schlecht aus.
Ich würde grundsätzlich anders herum denken: Was brauchst DU, damit deine Anwendung optimal funktioniert? Wo lassen sich Kompromisse machen? Wenn du ausschließlich nur mit dem arbeitest was du hast oder bekommst, wirst du früher oder später mit altem Zeug und seinen Nachteilen arbeiten. Nur mal so am Rande, grade weil du eine völlig neue Anwendung entwickelst und nicht nur was bestehendes erweiterst (wo das Argument ja durchaus valide sein könnte).Allerdings habe ich nur einen Server bekommen, also das zukünftige trennen der Anwedung und DB sieht eher schlecht aus.
Generall geht es dabei aber gar nicht so sehr um deine Infrastruktur, die du jetzt hast. Sondern das Anwendungsdesign. Es ist gängig und legitim, dass z.B. in Entwicklungsumgebungen alles auf der gleichen Maschine läuft. Man sollte DB und Applikation aber nicht unnötig fest miteinander verknüpfen. Sprich z.B. nicht den DB-Host hartkodiert auf localhost setzen, sondern in eine Variable der Konfigurationsdatei auslagern. Wenn du Host, Port, User und Passwort in deiner Config hast (oder alternativ einen ConnectionString), kann dein Datenbankserver problemlos woanders stehen.
Zitat von @Pat.bat:
Somit wäre es aber möglich auf dem Server via Visual Studio zu entwickeln und die Datenbank via Workbench zu verwalten.
Somit wäre es aber möglich auf dem Server via Visual Studio zu entwickeln und die Datenbank via Workbench zu verwalten.
Entwickeln auf einem Server?! Das ist keine gute Idee. Ein Server sollte Applikationen bereitstellen und am besten so minimal mit Software bestückt sein, wie möglich. Zum an der Applikation rumbasteln gibt es Workstations. Wenn du richtig sauber entwickelst, deployst du auch von da niemals direkt auf ein Produktivsystem. Sondern hast mindestens einen Dev/Testserver dazwischen. Je nach Größe/Relevanz der Software sogar mehrere (z.B. Dev + Quality, mehrere Testsysteme etc). Das ist vor allem für den Anfang sicher etwas overkill. Aber wenigstens 2 Systeme (lokal Entwickeln + Prod Server) solltest du schon MINDESTENS haben, um halbwegs vernünftig entwickeln zu können.
Zitat von @Pat.bat:
Wie würde dann auf auf die Applikation zugegriffen werden? Müsste man sich dazu eine Domain sichern und per url die Application aufrufen oder wie wird das normalerweise gehandhabt.
Wie würde dann auf auf die Applikation zugegriffen werden? Müsste man sich dazu eine Domain sichern und per url die Application aufrufen oder wie wird das normalerweise gehandhabt.
Normal hast du eine Domain oder zumindest Subdomain. In Firmen gibt es i.d.R. einen internen DNS-Server. Der löst dir dann irgend eine TLD auf (z.B. company.internal). Dort einen A-Record deineapp.company.internal auf den Zielserver, und schon kommen alle MA drauf. Abzuklären ist, ob die Anwendung nur firmenintern bereitgestellt werden soll. Falls auch im Internet, müsste man sich da entsprechend der Infrastruktur Gedanken machen, ob in der DMZ ein Proxy existiert etc.
Bei einer Webanwendung (z.B. mit ASP.NET Core) greifen die User dann einfach auf deineapp.company.internal zu. Fürs Verständnis: Falls du eine klassische WPF oder auch WinForms-Anwendung entwickeln würdest, wäre das auch so. Dann würde auf deineapp.company.internal die Middleware laufen. Statt kompletter HTML-Seiten würde die dann eben nur Daten (XML, JSON oder so was) zurückgeben, die von der Desktop-Applikation entsprechend in ihrer GUI aufbereitet bzw. in der Anwendungslogik weiterverarbeitet werden.