pat.bat
Goto Top

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.

Content-Key: 484540

Url: https://administrator.de/contentid/484540

Printed on: April 16, 2024 at 10:04 o'clock

Member: StefanKittel
StefanKittel Aug 13, 2019 at 09:40:45 (UTC)
Goto Top
Hallo,

probier mal Dein Glück mit Heidi.
https://www.heidisql.com/

Dazu brauchst Du nur die IP, Benutzername und Kennwort.

Stefan
Member: TheJoker2305
TheJoker2305 Aug 13, 2019 at 09:49:41 (UTC)
Goto Top
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
Member: Pat.bat
Pat.bat Aug 13, 2019 at 10:00:58 (UTC)
Goto Top
Hallo,

Entwickelt wird das Projekt über Visual Studio 2017 mit der Sprache C#. Die Anwedung soll eine WPF-App werden worüber Mitarbeiter dann bestimmte Aktionen ausführen können oder auch Inventar über Geräte führen können, dabei soll die Anwendung erweiterbar sein, sodass mit der Zeit immer mehr Funktionen hinzugefügt werden können.

Auf den Windows Server melde ich mich derzeit über eine Citrix Verbindung via Remotedesktopverbindung an. D.h.

1. Ich starte meinen PC
2. Ich Verbinde mich mit unserer Citrix Session/Desktop
3. Über Citrix rufe ich die Remotedesktopverbindung auf und melde mich dann via dem Computernamen auf den Server an

Dort laufen derzeit Batches über die Windows Aufgabenverwaltung.

Nun möchte ich diesen Server aber auch als Datenbankserver für die neue Anwedung nutzen. Als Alternative kam eine Access-DB auf einem Netzwerkpfad in Frage.

Aber wenn man schonmal einen Server hat, wieso nicht für mehr nutzen als nur Jobs.

Ich möchte aber hier nochmal betonen, das ich keine Erfahrung mit dem Administrieren von Servern und DB habe. Mir wurde in der Verganngeheit lediglich eine funktionierende SQL DB samt Verbindungsdaten zur Verfügung gestellt. Daher ist das nun Neuland für mich, worin ich mich aber gerne einarbeiten möchte.

Das Fachbuch was ich bekommen habe, zeigt mir lediglich wie ich eine MySQL DB lokal erstelle und diese einbinde. Daher meine derzeitige Angehensweise.


Vielen Dank für eure Tips soweit.
Member: aqui
aqui Aug 13, 2019 at 10:01:29 (UTC)
Goto Top
Member: TheJoker2305
TheJoker2305 Aug 13, 2019 at 10:52:22 (UTC)
Goto Top
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
Member: TheJoker2305
TheJoker2305 Aug 13, 2019 at 11:00:24 (UTC)
Goto Top
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
Mitglied: 140770
140770 Aug 13, 2019 updated at 11:42:21 (UTC)
Goto Top
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
Member: TheJoker2305
TheJoker2305 Aug 13, 2019 at 12:09:17 (UTC)
Goto Top
Dem stimme ich zu face-smile

Zitat von @140770:

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
Member: Pat.bat
Pat.bat Aug 13, 2019 at 12:42:14 (UTC)
Goto Top
ASP.NET hört sich auf jedenfall interessant an.

Allerdings habe ich nur einen Server bekommen, also das zukünftige trennen der Anwedung und DB sieht eher schlecht aus. Somit wäre es aber möglich auf dem Server via Visual Studio zu entwickeln und die Datenbank via Workbench zu verwalten.

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.

Ich werde etwas mit ASP.NET "rumprobieren" und ggf. ein Fachbuch bzw Online Kurs dazu belegen.

Das Tool befindet sich derzeit noch in Planungsphase. Momentan bin ich noch an einer VB.NET Anwendung dran, die ich in Zukunft abschließen werde. Dann solls etwas komplexer und professioneller werden.

Vielen vielen Dank für die Hilfe soweit face-smile
Mitglied: 140770
140770 Aug 13, 2019 at 12:52:01 (UTC)
Goto Top
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.

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 ...
Member: Pat.bat
Pat.bat Aug 13, 2019 updated at 12:59:12 (UTC)
Goto Top
Nein, ich meine wie der User, der ja an Arbeitsplatz XY sitzt auf diese App dann zugreifet. Die appliation sitzt ja soweit ich das verstanden habe auf dem Server. Wie ruft der Mitarbeiter diese nun auf? Er sitzt an seinem PC und ruft dazu einen Link auf oder eine Verknüpfung die auf diesen Server/Application linkt oder wie erfolgt der Zugriff?

Aber trotzdem Danke für die Links mit der MySQL Library, dann hab ich dazu auch schonmal einen Anhaltspunkt
Mitglied: 140770
140770 Aug 13, 2019 updated at 13:06:59 (UTC)
Goto Top
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.
Member: Pat.bat
Pat.bat Aug 13, 2019 updated at 13:35:37 (UTC)
Goto Top

Die meisten Desktop Anwendungen, welche Daten von einer Datenbank oder einer anderen externen Quelle beziehen, bauen anschließend eine > Verbindung zu einem Webservice auf.


Das ist mir klar, ich war mir nur mit ASP.NET nicht sicher, wie genau der Nutzer darauf zugreift. Da MS das kurz und knapp so erklärt:

What is ASP.NET?

ASP.NET extends the .NET developer platform with tools and libraries specifically for building web apps.


Also handelt es sich hierbei um eine reine Web-App, diese ruft der User dann per Browser auf, was in meinen Augen interessanter ist. Installation einer Anwendung ist immer so eine Sache bei uns.
Member: ASP.NET.Core
ASP.NET.Core Aug 13, 2019 at 17:20:18 (UTC)
Goto Top
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).

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).

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.

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.

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.