none
Benutzersteuerung einer Datenbankanwendung

    Frage

  • Hi,

    ich suche ein paar Denkanstöße;-) Ich möchte eine Datenbankanwendung in C# entwickeln. Wie ich Verbindungen zu Datenquellen aufbaue und mit den .NET-Datenklassen arbeite ist mir bekannt.

    Was mir aber fehlt ist ein Konzept für eine sichere Benutzersteuerung. Was meine ich damit?

    Die Anwendung soll auf die Oracle-Datenbank meines Unternehmens zugreifen. Hierfür ist mir ein User (ora) gegeben, der auf entsprechende Tabellen lesenden Zugriff hat. Aus dieser Datenbank möchte ich Daten selektieren, die dann in die von mir bereitgestellte MySQL-Datenbank geschrieben werden. Nun sollen diese Daten von den einzelnen Benutzern der Anwendung entsprechend ihrer Zugriffsrechte bearbeitet werden können.

    1. Orcale: Wo speichere ich die Verbindungszeichenfolge für die Oracle Datenbank sicher?

    2. MySQL: Lege ich auf dem MySQL-Server alle Benutzer an, die die Anwendung benutzen werden? Jeder Benutzer würde sich dann mit Passwort (Eingabemaske Anwendung) an der MySQL-Datenbank anmelden. Wie können die Benutzer dann aber ihr eigenes Passwort ändern?

    3. Die Anwendung: Unterschiedliche Benutzer sollen unterschiedliche Dialoge angezeigt bekommen. Lege ich dafür eine Tabelle mit den einzelnen Benutzernamen bzw. Gruppen an und lasse dann anhand des angemeldeten Benutzers die Anwendung ermitteln, welche Masken angezeigt werden?

    LG;-)

    Samstag, 15. Juni 2013 13:31

Alle Antworten

  • Hallo free.runn3r,

    Zu 1.)
    Die Verbindungszeichenfolgen werden normalerweise in der app.config bzw. bei Webanwendungen in der web.config abgelegt. Dort gib es spezielle Abschnitte für die Verbindungszeichenfolgen. Jetzt musst du noch definieren, was du mit "sicher" meinst!

    Zu 2.)
    Ich würde die Benutzeradministration NICHT in das Programm miteinbauen, sondern das wirklich in der Datenbank selber machen. Es sei denn, es gibt sehr häufige Benutzerwechsel und der Administrative Aufwand wäre entsprechend hoch.

    Zu 3.)
    Das wäre natürlich eine Möglichkeit. Insbesondere dann, wenn die Abhängigkeit dynamisch sind. Wenn diese sehr statisch sind, würde ich diese in der entsprechenden config Datei unterbringen.

    Ich hoffe, ich konnte dir weiterhelfen.


    Viele Grüße Holger M. Rößler

    Samstag, 15. Juni 2013 17:42
  • Hey Holger, vielen Dank,

    In meinen bisherigen "kleinen" Anwendungen habe ich den ConnectionString bereits in der app.config abgelegt. Natürlich inklusive Benutzername und Passwort im Klartext:-( Der Benutzer hat zwar nur Leserechte auf der Datenbank aber dennoch möchte ich nicht, dass die Anwender diesen Datenbankbenutzer samt Kennwort einsehen können. Ich weiß, dass man mit aspnet_regiis.exe den ConnectionString-Abschnitt verschlüsseln kann. Jedoch erschließt sich mir hieraus nicht die angestrebte Sicherheit. Denn so wie ich es verstanden habe, wird der ConnectionString in der Anwendung wieder entschlüsselt. Darunter verstehe ich weiter, dass der aktuelle Windowsbenutzer als Ausführer der Anwendung, das Recht hat, den ConnectionString zu entschlüsseln, dass wiederum kann er dann ja mit aspnet_regiis.exe manuell tun, oder verstehe ich das falsch?

    Aber wäre es dennoch möglich den ConnectionString vor dem User sicher zu verbergen, könnte ich einfach einen einzigen MySQL-Datenbankbenutzer mit Schreibrechten anlegen der sämtliche Tabellenoperationen in meiner Anwendung auf der Datenbank ausübt. Ich könnte dann eine Nutzertabelle anlegen (Inhalt: Name, Passwort (MD5), Rechte). Anhand dieser Tabelle kann dann meine Anwendung entscheiden, was der Anwender in den Dialogen machen darf. (Punkt 3)

    Aber dann Bestünde immer noch die Gefahr, dass jemand die Anwendung disassembled und mit eigen Statements (Manipulation von Tabellen) neu kompiliert.

    Es wäre wohl am Sichersten "echte" Datenbankbenutzer mit entsprechende Tabellenrechte zu definieren. Aber dann bleibt immer noch die Frage, wie kann solch ein Benutzer sein Passwort ändern?

    Und dann hätte ich noch ein Problemchen mit den "echten" Datenbankbenutzern. Sie können zwar nur die Daten bestimmter Tabellen modifizieren, aber wenn ich zwecks Kontrolle in einer dieser Tabellen bei Datensatzänderung einen TimeStamp+User eintragen lasse, könnt der User diesen Eintrag im Nachgang wieder manipulieren, wenn er sich mit seinem Benutzernamen manuell zur Datenbank verbindet. Er hat ja schließlich Schreibrechte auf "seine" Tabelle.

    Manmanman, ganz schön verzwickt, jedenfalls für mich, und ich bin doch nur Sachbearbeiter;-)

     Vielen Dank für's Lesen meiner ermüdenden Anfängerprobleme.

    Samstag, 15. Juni 2013 18:26