Announcement

Collapse
No announcement yet.

MySql Datenbank sperren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySql Datenbank sperren

    Hallo und guten Tag,
    wie man eine DB öffnet, wenn man das root-Passwort vergessen hat, darüber ist schon viel geschrieben worden. Was mache ich aber, wenn ich meine DB vor fremden Zugriffen schützen will? Da jeder den Server unter Umgeheung der GRANT-Einträge neu starten kann und somit an alle Tabellen kommt, gibt es wohl kein eigentlichen Schutz? Den Tabelleninhalt verkrypten scheidet aus, da ich dann in hundert Tabellen die Feldlängen ändern müsste.
    Danke für eine Antwort. Norbert
    Zuletzt editiert von strzata; 17.08.2012, 14:09.

  • #2
    Keinen an den Rechner lassen. Üblicherweise darf nicht jeder jeden Rechner betreuen/anmelden. Wer auf einem Rechner Zugang hat, kann immer alles mögliche tun. Irgendwo beginnt die Grenze wo man dem Betrieb nun vertrauen muss.
    Christian

    Comment


    • #3
      Danke. Ist keine Lösung für mich. Die User arbeiten mit meinem Programm, welches die Daten darstellt und wo sie neue Daten über entsprechende Masken eingeben können. Das Verändern der Daten ohne das Programm muss unterbunden werden, da nur somit ein Betrug verhindert werden kann.
      Norbert

      Comment


      • #4
        Die Daten können nicht verschlüsselt werden
        Jeder User hat offenbar seine eigene, lokale DB.
        Dann ist wohl das Anwendungskonzept zu überarbeiten....
        Christian

        Comment


        • #5
          Jeder User hat offenbar seine eigene, lokale DB.
          Manche Anwender ja, andere haben einen zentralen Server. Aber wofür ist das wichtig?
          Betrug z.B.: Chipkarte wird eingelesen, Datum muß unveränderlich sein.
          Da öffnet jemand die Tabelle und setzt das Einlesedatum um. Hat er kein root-Passwort, fährt er den Server runter und startet ihn so, dass er kein Passwort braucht (Umgehung von GRANT). Wie kann ich das verhindern?
          Norbert

          Comment


          • #6
            Ich weiss nicht was für eine Anwendung du konzipiert hast, aber wenn der Anwender als Admin zugriff auf einen zentralen DB-Server hat, stimmt etwas nicht. Selbst wenn es so ist und es auch lokale Installationen gibt (und auch Admins der DB-Server), wirst du dann nicht umhinkommen die Daten zu verschlüsseln. Alternativ kannst du auf Oracle umsteigen. Meines Wissen kann diese die Daten automatisch verschlüsselt ablegen, ohne das dies durch die Anwendung passieren muss
            Christian

            Comment


            • #7
              Wäre das eine Idee?
              Gibt es eine Datei (z.B. my.ini oder eine andere), ohne die der Server nicht gestartet werden kann?
              Dann würde ich mit dem Beenden meines Programms diese Datei umbenennen und verstecken.
              Beim Starten meines Programms mache ich das rückgängig.

              Comment


              • #8
                Na ja, ich bin kein großes Licht in Sachen MySql. Wenn ich in meiner Anwendung die Rechte für die User einschränke - kann dann nicht trotzdem jemand den Server als Admin starten?
                Und Lesen und Schreiben sowie INSERT und UPDATE und auch DELETE muss ja doch jeder können. Zwar in einigen Tabellen nicht, aber meistens. Was kann ich da einschränken?

                Comment


                • #9
                  http://technet.microsoft.com/en-us/s...rnals/bb896645

                  lässt sich damit in weniger als 5 Min erkennen, was du da tust

                  Na ja, ich bin kein großes Licht in Sachen MySql. Wenn ich in meiner Anwendung die Rechte für die User einschränke - kann dann nicht trotzdem jemand den Server als Admin starten?
                  Und Lesen und Schreiben sowie INSERT und UPDATE und auch DELETE muss ja doch jeder können. Zwar in einigen Tabellen nicht, aber meistens. Was kann ich da einschränken?

                  Äh, du hast dich informiert, wie man User anlegt, Rechte vergibt u.a.?

                  Oder läuft deine DB unter root und die Anwendung und alle User ebenfalls
                  Christian

                  Comment


                  • #10
                    wie man User anlegt, Rechte vergibt u.a.?
                    Das beherrsche ich schon so recht und schlecht. Aber darum geht es nicht. Ich will nicht, dass sich jemand mit meiner DB connecten und Tabellen öffnen kann, wenn er nicht mein geheimstes Passwort kennt. Aber so wie ich mich jetzt informiert habe, ist das wohl bei MySql nicht möglich, denn es kann sich jederzeit jemand als root ausgeben (oder neu anlegen) und hat dann alle Datenbanken im Zugriff. Vielen Dank, dass Du mich bei diesem Findungstrip unterstützt hast.
                    Gruß Norbert

                    Comment


                    • #11
                      Du must doch hier einiges trennen:

                      User die Rechte an einem Schema haben und dort lesen und schreiben können
                      User die direkten Zugriff auf die DB/Server haben und diese ggf. kompromitieren können

                      Wenn du das alles kontrollieren willst, musst du die Anwendung entsprechend entwerfen. Grundsätzlich ist dann
                      - eine Client/Server-Anwendung zu entwerfen
                      - die Clients kommunizieren verschlüsselt mit einer Serverkomponente
                      - die Serverkomponente ihrerseits implementiert die Persistenzschicht, so dass die Clients keinerlei DB-Zugriffe machen
                      - die Serverkomponente wird auf deinen Rechner(n) gehostet, so dass andere nicht an diese Rechner kommen
                      Christian

                      Comment


                      • #12
                        Was willst du genau verhindern?

                        Das der User die Daten im Klartext sehen kann? Schau dir die Encyption-Möglichkeiten von MySQL an
                        Unveränderlichkeit der Daten außerhalb der App: Evtl. gesalzene MD5-Hashes für die Daten in gesonderten Feld hinterlegen

                        Für beide Fälle musst du dir aber auch Vorkehrungen Treffen das die Anwendung an sich nicht ausspioniert (Algorithmus mit Salt darf nicht so einfach in App gefunden werden) wird bzw. die App manipuliert wird.
                        Bei diesen Punkt kannst du es schwer machen. Ein 100% Schutz wird es niemals geben wenn die Anwendung und die DB beim User liegt. Da haben schon ganz andere mit Mio-Aufwand versagt (siehe Kopierschutz bei DVDs)

                        Comment


                        • #13
                          Danke Bernhard! Ich hatte es schon aufgegeben, aber jetzt durch Deine Antwort scheint meine Realisierung in greifbare Nähe gerückt. Hast mich genau verstanden : "Verhindern, dass der User die Daten im Klartext sehen kann" bzw. nur mit einem nicht zu vertretbaren Aufwand.
                          Ich hatte nicht gewußt (und meine Schwiegersöhne, die alle Programmierer sind, hatten es mir auch nicht gesagt), dass es in MySql eine Encrypt-Methode gibt, die die Länge eines Strings nicht verändert. Das ist Klasse und für mich genau richtig. Nur bei einem Datumsfeld funktioniert es nicht:
                          Code:
                          update t500 set C5000=encode(C5000,'12345') limit 5
                          1292 - Incorrect date value: '±╣╙Ñ╛¬╚≡' for column 'C5000' at row 1
                          Aber damit könnte ich leben. Bleiben die Datums halt wie sie sind.
                          Interessant scheint aber auch Deine zweite Methode zu sein ("Unveränderlichkeit der Daten außerhalb der App: Evtl. gesalzene MD5-Hashes für die Daten in gesonderten Feld hinterlegen") Das würde mir wohl nich besser gefallen. Kannst Du mir das näher erläutern?
                          Norbert

                          Comment


                          • #14
                            http://de.wikipedia.org/wiki/Message-Digest_Algorithm_5

                            Du speicherst zu den Daten ZUSÄTZLICH den Hashwert und vergleichst diesen mit den gehashten Daten
                            Christian

                            Comment


                            • #15
                              Danke Christian. Nicht so gut für mein Vorhaben, da Daten noch einsehbar sind. Das Encrypten bei gleicher Feldlänge ist da besser.
                              Nun noch eine laienhafte Vorstellung:
                              Ich würde den Encrypter gerne erst dann drüberjagen, wenn ein nicht berechtigter User die Connection zur DB aufbaut. Gibt es dazu ein Event? Kann ich irgendwo einen Trigger einsetzen? Hab versucht, in der Mysql.User einen Trigger zu installieren, der feuert, wenn ein neuer User angelegt wird (INSERT). Aber das läßt MySql nicht zu. Wie gesagt: laienhafte Vorstellung, wird wohl nicht gehen.
                              Norbert

                              Comment

                              Working...
                              X