Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Username für Loginbereich aus seperater Datenbank (https://www.delphipraxis.net/161050-username-fuer-loginbereich-aus-seperater-datenbank.html)

Newcomer91 14. Jun 2011 13:41

Datenbank: Firebird • Version: 2.5 • Zugriff über: ?

Username für Loginbereich aus seperater Datenbank
 
Hallo Leute,

ich habe eine Frage. Unzwar arbeite ich an einem neuen Projekt welches einen Login Bereich enthalten soll. Die Anwendung wird im Netzwerk laufen und nun zur Umsetzung:

ich brauche eine kleine Datenbank welche eine Tabelle mit 3 Spalten enthält. In diesen 3 Spalten werden Kürzel eingetragen. Die eigentliche Anwendung soll nun den Domänenbenutzernamen mit den Kürzeln aus den 3 Tabellenspalten vergleichen. Die Spalte die zutrifft, z.B. "Administrator" ist dann auch einer der 3 möglichen Eingabemasken die der User dann hat.
Arbeitet also User X mit Programm Y und sein Kürzel X ist in der Spalte Administration zu finden, soll er in den Administratorbereich weitergeleitet werden.

Wie realisiere ich das am besten? Welche Komponenten nehme ich und gibt es kostenlose software zur Unterstützung?
Mein Ding ist nur dass ich noch nicht mit Datenbanken gearbeitet habe. Über korekte Tutorialquellen würde ich mich auch freuen.

Vielen Dank im vorraus.

New

scrat1979 14. Jun 2011 15:47

AW: Username für Loginbereich aus seperater Datenbank
 
Ich würde Dir die IBDAC Komponenten empfehlen. Habe klasse Erfahrungen damit gemacht. Desweiteren solltest Du Dir mal ein Tutorial über SQL ansehen. Eine Referenz findest Du hier...

Ich vermute, das ganze soll mit Passworteingabe sein. Ich empfehle Dir, das Passwort nicht im Klartext in der DB zu speichern, sondern den md5-Hash und dann beim Login auf selbigen zu überprüfen. Ob der Login korrekt ist, kannst Du z.B. überprüfen, ob folgender SQL-Syntax einen Datensatz liefert. Wenn ja, dann Login korrekt, wenn nein, dann Login falsch.

Delphi-Quellcode:
SELECT id FROM tblUserDaten ud
WHERE ((ud.Username = xxxx) AND (ud.PassHash = xxxxxxxxx))
Hier solltest im Übrigen Du mit Parametern arbeiten, um SQL-Injections zu verhindern!

Was die Tutorials angeht, liefert Google und die Forensuche genug :-)

CCRDude 14. Jun 2011 16:50

AW: Username für Loginbereich aus seperater Datenbank
 
Wenn ich das richtig verstanden habe, soll die lokale Domäne für die Authentifizierung zuständig sein. Also im worst case hält einfach der Username her, sehr ordentlich geschrieben wird der nochmal verifiziert. Also kein Passwort, sondern nur ein Status.

Wenn aber Passwort, dann nicht bloß Hash, sondern immer nur mit Salz!

Ich denke, der erste Ansatz sollte nicht Code oder gar Komponenten sein, sondern Einlesen in Datenbanken an sich. "Eine Tabelle mit drei Spalten" klingt nicht wie das, was ich aus der Aufgabenbeschreibung verstehe, eher sowas wie eine Username-Rechtestufe-Tabelle wie:
Code:
CREATE TABLE `intra_horde`.`rights` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` CHAR( 255 ) NOT NULL ,
`level` ENUM( 'unknown', 'newbie', 'advanced', 'admin' ) NOT NULL DEFAULT 'unknown',
UNIQUE ( `username` )
);
Und dann die Abfrage:
Code:
SELECT DISTINCT `level`
FROM `rights`
WHERE `username` LIKE 'KarlOtto';

p80286 14. Jun 2011 17:28

AW: Username für Loginbereich aus seperater Datenbank
 
Ins Unreine gesprochen,
ich würde dafür zwei Tabellen nutzen "User" und "Rights". ggf. fals einem Benutzer auch mehrere Rechte zugewiesen werden können, noch die "UserRights" für N:N Beziehungen.

Ggf. könnte man auch die LDAP nutzen, wenn DB-User und Login-User immer die gleichen Personen sind. Aber das geht u.U. schon zu weit.

Gruß
K-H

rollstuhlfahrer 14. Jun 2011 19:32

AW: Username für Loginbereich aus seperater Datenbank
 
Warum 2 Tabellen? - Statt des ENUMS einfach ein SET verwenden. Das arbeitet intern wie eine Bitmaske und damit kann man die Rechte auch eintragen (auch mehr als 1).

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz