Laden...

Logik für DB-Pwd

Erstellt von skaface vor 18 Jahren Letzter Beitrag vor 17 Jahren 7.932 Views
skaface Themenstarter:in
245 Beiträge seit 2005
vor 18 Jahren
Logik für DB-Pwd

Hallo zusammen!

Ich bin mir nicht ganz sicher, ob ich hier im richtigen Forum bin, da es aber nicht primär um DB oder Forms geht denk ich mal schon...

Meine Frage:

Ich hab eine Windows-Forms-Anwendung, die auf eine MySQL-DB zugreift, welche entweder auf einem Webspace oder am localhost liegt (spielt eigentlich keine Rolle).
Da die Anwendung von mehreren Usern gleichzeitig benutzt werden kann hab ich eine Tabelle User, in welcher (wie nicht anders zu erwarten) der Name und das Pwd (MD5-verschlüsselt) des Users stehen.
Bei der Anmeldung gibt der Benutzer derzeit also seinen Namen, den Server (Port), DB-Namen und sein User-Pwd ein. Soweit so gut...
Jetzt steh ich vor dem Problem, das ich nicht weiß, wie ich das Dabenbank-Passwort integrieren soll? Im Moment steht das noch fix im Code, was ja wahrlich nicht die schönste Lösung ist. Ich will aber auch nicht jedem Benutzer das Datenbank-Pwd verraten und es zur Login-Maske hinzufügen (wär ja auch schwachsinn wenn jeder User auf alle Daten zugriff hätte...).

Eine Möglichkeit wäre natürlich die Benutzer direkt über den MySql-Administrator anzulegen, was allerdings nur funktioniert, wenn ich auf die localhost-DB zugreife, da ich bei der DB am Webspace nicht die Rechte habe meherere Benutzer zu erstellen...

Hoffentlich kann mir hier jemand einen Denkanstoß geben, wie man sowas ordentlich realisieren kann...

Danke, mfg

mike

354 Beiträge seit 2004
vor 18 Jahren

Ich könnte mir hier folgendes vorstellen:

  1. Den Usern, die auf die Datenbank über deine Anwendung zugreifen müssen einen eigenen Datenbank-User zur Verfügung stellen. Dieser hat nur eingeschränkte Rechte und darf auch nur auf diese eine bestimmte Datenbank zugreifen. Dann ist das Problem nur mehr halb so schlimm.

  2. Das Passwort hartgecoded in den Source zu nehmen ist nicht so besonders fein. Was du allerdings machen könntest ist, den ConnectionString (ich denke, dass der User auch nicht unbedingt die Datenbank etc. aussuchen können muss, wird ja vermutlich immer die gleiche sein, oder?) verschlüsselt in eine Config-Datei schreiben. Muss nichts Aufwendiges sein. Der Otto-Normal-User kriegt das Passwort da nicht mehr raus.

  3. Die dritte und aufwändigere (aber auch schönste) Variante ist, dass du dir einen Server baust. Das heißt, deine Applikation redet nicht mehr direkt mit der Datenbank, sondern mit deinem Server. Dieser besitzt im Idealfall auch die Business-Logik und so können Funktionalitäten auch einfach ausgetauscht werden. ABER zumindest könntest dort die Datenbank-Connectivity einbauen. So gibt es Datenbank-Zugriffs-Informationen nur auf dem Server. Nicht jedoch am Client. Dieser besitzt nur die Information, wie er auf deinen Server zugreifen kann.

Just my 2 cents.

.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup

skaface Themenstarter:in
245 Beiträge seit 2005
vor 18 Jahren

Danke für die rasche Antwort:

ad 1.) Wie oben bereits erwähnt kann ich auf meinem Webspace und der darin enthaltenen DB keine neuen Benutzer erstellen...

ad 2.) Der Name der Datenbank ändert sich vielleicht nicht zwangsläufig, sehr wohl allerdings der Server, auf welchem die DB läuft (das Programm ist nicht komerziell und Benutzer sind nur ein paar gute Bekannte, wobei der ein oder andere eine eigene DB (localhost oder auch Webspace) hat und diese benutzen möchte...

Der Otto-Normal-User kriegt das Passwort da nicht mehr raus.

Der Otto-Normal-User kriegt das Passwort auch aus der exe nicht raus (wenn es hartgecoded ist).

ad 3.) Das Programm ist soweit fertig und Business-Logik usw. wieder abzukapseln ist mir 1. zu aufwendung, 2. muss dafür erst mal ein Server her (mit ASP.NET-Unterstützung(?)) und 3. müsste ich dafür mal ASP.NET lernen g

danke, mfg

mike

354 Beiträge seit 2004
vor 18 Jahren

Nein, ASP.NET-Kenntnisse sind nicht notwendig. Du könntest dies über ein WebService lösen. Aber nachdem du keinen .NET fähigen Webspace hast, erübrigt sich diese Variante ohnehin.

.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo suamikim,

"vernünftige" Datenbanken haben die Möglichkeit Anwendungen statt Benutzer zu berechtigen. Ob und wie das geht hängt von der Datenbank ab und kann deshalb nicht pauschal beantwortet werden.

herbivore

skaface Themenstarter:in
245 Beiträge seit 2005
vor 18 Jahren

"vernünftige" Datenbanken haben die Möglichkeit Anwendungen statt Benutzer zu berechtigen. Ob und wie das geht hängt von der Datenbank ab und kann deshalb nicht pauschal beantwortet werden.

Wie bereits erwähnt handelt es sich um eine MySql-DB (Version 4.0.15). Hab persönlich noch nie von solchen "Mechanismen" gehört. Kannst du mir das ein wenig genauer erklären und ob das unter MySql möglich ist?

danke, mfg

mike

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo suamikim,

mysql scheint das nicht zu können.

Bei DB2 läuft der Mechanismus unter dem Begiff Binding. Damit ist es möglich, dass ein Benutzer mittels (autorisiertem) Programm Tabelleninhalte (in der durch das Programm vorgegebenen Weise) ändern kann, für die er als Benutzer gar nicht berechtigt ist. Das ist z.B. wichtig für Buchhaltungsprogramme.

herbivore

S
1.047 Beiträge seit 2005
vor 18 Jahren

kann der mssql server sowas?

190 Beiträge seit 2005
vor 18 Jahren

Hallo ...

Original von nitronic
3. Die dritte und aufwändigere (aber auch schönste) Variante ist, dass du dir einen Server baust. Das heißt, deine Applikation redet nicht mehr direkt mit der Datenbank, sondern mit deinem Server. Dieser besitzt im Idealfall auch die Business-Logik und so können Funktionalitäten auch einfach ausgetauscht werden. ABER zumindest könntest dort die Datenbank-Connectivity einbauen. So gibt es Datenbank-Zugriffs-Informationen nur auf dem Server. Nicht jedoch am Client. Dieser besitzt nur die Information, wie er auf deinen Server zugreifen kann.

Für ein kommendes Projekt will ich auch genau diesen Weg gehen und bin auf der Suche nach geeigneten Technologien. Auf der Clientseite soll C# zum Einsatz kommen. Den Server will ich mit Java umsetzen, um eine gewisse Plattformunabhängigkeit zu erreichen. Jetzt Suche ich noch nach einer Möglichkeit die Kommunikation zwischen Client und Server am geschicktesten umzusetzen. Ich dache da eventl. an WebServices. Was haltet ihr davon?

Danke,
cx°

354 Beiträge seit 2004
vor 18 Jahren

Bei einem Webservice wirst sicherlich Spaß haben, da Microsoft SOAP ein wenig anders sieht 😉

Aber warum nicht auch den Server in C#? Könntest via Mono umsetzen und deine Plattformunabhängigkeit ist gegeben. Noch dazu hast du den Vorteil der "gleichen" Technologie. Sehe da kein Problem.

Es hängt auch davon ab, welche Application du baust und was kommuniziert wird. Eventuell würde (wenn man die genauen Informationen besitzt) ein reiner TCP-Server mehr Sinn machen - ist aber aufwändiger, wenn man Threading, Pooling etc. behandelt.

@herbivore:
Anwendungen statt User zu berechtigen ist auch nicht wirklich das Gelbe vom Ei. Nur weil jemand die Software hat, heißt das noch lange nicht, dass er auch auf die Daten Zugriff bekommen soll. Kombination aus beidem ja, nur Anwendungen berechtigen, nein.

@MSSQL Berechtigungen:
Sowohl 2000 als auch 2005 können (meinem Wissensstand zufolge) keine "Anwendungen anmelden". Macht meiner Meinung - herbivore sieht das anscheinend anders - auch keinen Sinn. Berechtigungen kannst du hier Datenbank-Benutzern bzw. Windows-Benutzern geben.

"Vernünftige" Lösungen besitzen auch keinen direkten Zugriff auf die Datenbank, sondern verwenden hierfür einen getrennten Layer/Tier (Server auf Basis eines WebServices, TCP, whatever). Deshalb stellt sich diese Problematik ansich überhaupt nicht, da sich nur EINE Anwendung am Server anmeldet und diese in der Hand des Administrators ist, was bei einem Client nicht unbedingt der Fall sein muss.

.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo nitronic,

Nur weil jemand die Software hat, heißt das noch lange nicht, dass er auch auf die Daten Zugriff bekommen soll.

wir reden hier natürlich in der Regel über Software, die eine eigene Berechtigungsprüfung hat oder über Report-Software für unkritische Daten.

Sowohl 2000 als auch 2005 können (meinem Wissensstand zufolge) keine "Anwendungen anmelden".

Ob DB2 wirklich "Anwendungen anmelden" kann, weiß ich leider auch nicht (mehr). Aber mit der Anwendungsberechtigung kann man z.B. UserIds verwenden, die selbst keinerlei Berechtigung haben und es daher auch nicht wirklich schlimm ist, wenn sie oder die zugehörigen Passworte bekannt werden.

herbivore

354 Beiträge seit 2004
vor 18 Jahren

Das von dir angesprochene Feature kenne ich nicht, da ansich relativ wenig Erfahrung mit der DB2. Jedoch sieht das für mich so aus, als könnte dies über einen eigenen DB-User abgebildet werden.

.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo nitronic,

dann muss der User aber geheim bleiben. Durch das Binding umgeht man das. Und das war ja gerade die Ausgangsfrage.

herbivore

-
885 Beiträge seit 2004
vor 17 Jahren

Guten Abend die Damen,

bin gerade dabei ein ähnliches Programm bzw. Modul zu schreiben. Vorerst speichere ich die Zugangsdaten über MD5 in der App.Config. Mich würde aber mehr Client/Server/Webseervice Lösung interessieren. Wie läuft das genau?

Umgebung:
Client programmiert in C#
MySQL-DB im Web