Login Versuche limitieren

Naquadah

Benutzer
Beiträge
10
Hallo,

ich habe mithilfe von C# eine Datenbankanwendung geschrieben und diese ist eigentlich nun schon so gut wie fertig aber ich denke grad darübern nach (und es ist ja auch warscheinlich sinvoll), die Login Versuche auf 5 zu limitieren und dann für 10 Minuten? zu sperren oder dergleichen.
Kann man das irgendwie schon nativ mit MySQL verhindern oder brauch man dafür eine Codestruktur oder eine zusätzliche Tabelle in der Datenbank?

Zudem fehlt mir auch denke ich noch eine Art von Benutzerkontrolle.
Ich frage derzeit in einer Tabelle Kunde ob, ob der Nutzer exisitert und wenn dieser in der Anwendung die richtigen Datne eingibt, dann bekommt er auch Zugriff aus das Programm und darf dementsprechend die Daten von der Datenbank abfragen, also Anzalh der Kunden usw.
Bräuchte ich dann evtl. noch eine zusätzliche Tabelle oder ein zusätzliches Attribut "Eingeloggt" oder "zuletzt" "eingeloggt" oder ein Atrribut "Gesperrt"?
Wie realisiert man diese zwei Sachen am besten?
 
Werbung:
Applikationsuser = Datenbankuser... Wäre wohl das einfachste?
Oder soll jeder der die Applikation benutzt über den selben User Daten anfassen?
Das macht Rückverfolgbarkeit, etc. extrem schwierig...
Und dieser "rein logische" Ansatz von User "imitation" über eine User-Tabelle macht mir sogar irgendwie Angst...
 
Mmm ... ich hatte auch irgendwie einen krasse Denkfehler.
Das wäre wohl wirklich das einfachste aber wie kann man das denn realisieren, ist das eigentlich bei größeren Anwendungen auch so oder bei Unternehmen wie Amzon beispielsweise, das jeder Benutzer auch einen Datenbankaccount hat?
Das ist ja der Befehl um einen neuen Benutzer anzulegen: grant all privileges on *.* to 'Name'@'localhost' identified by 'password';

Wie könnte ich das denn dann mit den Login Versuchen realisieren udn wie kann ich den Zugriff für den Nutzer beschränken, z.B auch so, das die Nutzer einen Account erstellen können und dann auch nur Zugriff auf die Datenbank haben? Geht das irgendwie direkt beim erstellen?

Auch mal so aus Interesse:
Kann man dann auch nachher über die Datenbank zurückverfolgen, ob ein User etwas gelöscht hat oder bearbeitet usw. oder gibt es dazu eine Funktion die man aktivieren muss, bzw. ist das schon nativ aktiviert?
 
Zuletzt bearbeitet:
Das ist ja der Befehl um einen neuen Benutzer anzulegen: grant all privileges on *.* to 'Name'@'localhost' identified by 'password';

Der so erstellte User hat alle Rechte, insbesondere auch die, jegliche Einschränkungen von Dir auszuhebeln. Er kann auch nach belieben sich selbst Millionen weitere Superuser erstellen.
 
Vielleicht hätte ich es doch lieber dazu schreiben sollen? Das war nur ein Beispiel. Dann halt so:
grant select, insert, update, delete, create, references, index, alter on test1.* to 'Name'@'localhost' identified by 'password';
 
Vielleicht hätte ich es doch lieber dazu schreiben sollen? Das war nur ein Beispiel. Dann halt so:
grant select, insert, update, delete, create, references, index, alter on test1.* to 'Name'@'localhost' identified by 'password';

Naja, wie sollen wir das wissen?

Was spricht gegen die Nutzung von PAM? Man muß das Rad ja nicht immer wieder neu erfinden.
 
Wohl wahr, das sollte ja auch kein Vorwurf sein.
Ich habe ja auch nur gefragt, weil ich davon keine Ahnung habe. Ich kenne wohl die grundlegendsten SQL-Befehle und Aufbau etc. und ich habe auch schon einiges mit Joins gemacht aber manchmal weiß ich dennoch nicht, wie ich eine Datenbank richtig aufbauen soll und ich interessiere mich sehr für das Thema "Sicherheit". Es ist doch sicherlich sinnvoll, die Anfragen von einem User zu limitieren?

Ist das denn das übliche, was man so in der Praxis verwendet? Hast du denn eine empfehlenswerte Quelle, wie man das ganze richtig einrichtet etc. (Buch, Website, PDF)?
 
Ich weiß nicht inwiefern MySQL da was hat... Aber bei Oracle kann man Rechte auch auf Rollen ebene vergeben und dann den Usern nurnoch einzelne Rollen zuweisen :)
 
Ich weiß nicht inwiefern MySQL da was hat... Aber bei Oracle kann man Rechte auch auf Rollen ebene vergeben und dann den Usern nurnoch einzelne Rollen zuweisen :)

Falls man es braucht, kann man Usern auch Rechte auf Row-Ebene geben. Also z.B. eine Tabelle mit 10 Einträgen, wo Chef alle sehen kann, Mitarbeiter1 nur Rows 1-3, Mitarbeiter2 die Rows 4-8 und Mitarbeiter3 Row 9 und 10.

Kommt halt drauf wan, was genau Du machen willst. Das Thema ist nicht trivial. Welche Fallen es gibt zeigt auch die Doku hier:

http://www.postgresql.org/docs/9.4/static/rules-privileges.html , achte auf security_barrier. Ebenfalls bei http://www.postgresql.org/docs/9.3/static/sql-createview.html und http://www.postgresql.org/docs/9.3/static/sql-createfunction.html.

Auch lesenswert, wenn auch noch Zukunft: http://www.depesz.com/2014/10/02/waiting-for-9-5-row-level-security-policies-rls/

Das sind aber vermutlich alles Dinge, die man bei MySQL nicht finden wird.
 
Falls man es braucht, kann man Usern auch Rechte auf Row-Ebene geben. Also z.B. eine Tabelle mit 10 Einträgen, wo Chef alle sehen kann, Mitarbeiter1 nur Rows 1-3, Mitarbeiter2 die Rows 4-8 und Mitarbeiter3 Row 9 und 10.
Das schien mir in diesem Zusammenhang aber nicht wirklich sinnvoll... Jenachdem wieviele User wird das schnell sehr unübersichtlich...
Oracle hat da aber auch etwas für http://www.oracle.com/webfolder/technetwork/de/community/dbadmin/tipps/vpd/index.html

Rollen bzw. Userebene tiefer würde ich nicht gehen... Ist aber auch nur meine Meinung :)
 
Werbung:
Zurück
Oben