user_name einer InterBase-DB auslesen
-
Hallo Leute,
ich schreibe gerade ein Tool mit dem man auf eine IB-Datenbank zugreifen kann. Ich beabsichtige in der DB mehrere User zu verwalten mit unterschiedlichen Rechten. Die User und ihre Rechte richte ich mit IBExpert ein. Das ist noch kein Problem! Wenn ich jetzt aber mein Tool starte, verbindet sich das Tool mit der DB und es erscheint ein LoginPrompt. In diesem kann man ja den Username und Passwort angeben. Sind diese OK, bin ich verbunden.
Jetzt mein Problem: Da es verschiedene User/Rechte gibt, möchte ich das in meinem Tool verwenden (z.B. Button1->Enabled=false). Wie kann ich denn jetzt den angemeldeten UserName erfragen? ich verwende folgende Komponenten von BCB5
- IBDatabase
- IBTransaction
- IBDataset
- DataSourceIch habe auch schon die Suche gestartet und leider nur den Hinweis GetUserName() gefunden. Kann damit aber nicht viel anfangen

Bis denn, Torsten
-
Hallo Torsten,
schau dir mal die Admin-Komponenten von IBExpress an. Damit kannst du alle User auslesen.
Gruß Rainer
-
Hi,
wo finde ich denn IBExpress? Ich habe den CBuilder5 von Borland und da benutze ich die InterBase-Kompos.
-
Hallo,
nach einiger Suche habe ich die Loesung meines Problems gefunden. Der user_name wird bei erfolgreichem login in IBDatabase->Params gespeichert. Diesen Eintrag kann man mitIBDatabase1->Params->CommaTextauslesen.
Jo...
-
Als nicht-mit-Interbase-Vertrauter stellt sich mir dabei die Frage: so bekommst du zwar den Usernamen, aber woher weiss dein Tool, welche Rechte dieser User hat?
Oder habe ich etwas falsch verstanden und es geht nicht um gestaffelte Berechtigungen für den Zugriff auf die DB selbst, sondern die DB dient der Verwaltung von Usern/Berechtigungen für ein anderes Programm/Website o.ä.?
-
@Jansen,
doch es geht um die unterschiedlichen Rechte fuer die DB. Damit nicht jeder User an ALLEN Daten\Tabellen rumfummeln kann. Ich habe in meinem Programm vor, manche Datensätze in bestimmten (wichtigen) Tabellen hinzuzufügen bzw. ändern zu können. Diese Tabellen/Forms soll aber nur der ADMIN aufrufen und sehen können. Dazu brauche ich dann den user_name des z.Zt. angemeldeten Benutzers um den Menüeintrag zum aufrufen der Form auf Enabled=true zu setzen.Beispiel:
if(username=="ADMIN") ButtonForm2->Enabled=true;Ist das so verständlich?

Gruß Torsten
-
Ahja. Aber sowas regelt man üblicherweise doch allein über die im DBMS gesetzten Berechtigungen, oder? Wenn ein einfacher User versucht, auf eine Admin-Tabelle zuzugreifen bekommt er halt eine entsprechende Fehlermeldung.
Die Hart-Kodierung im Programm scheint mir irgendwie nicht optimal. Einerseits würde eine Änderung des Admin-Namens ein Neukompilierung erforderlich machen, ausserdem steht der Name möglicherweise im Klartext in der Exe, und schlussendlich kann die Params-Property kann ja nicht nur gelesen sondern auch geschrieben werden, könnte also durch einen Programmfehler falsche Daten enthalten.
Hast du wenigstens mal kontrolliert, ob und was da nach einem fehlgeschlagenen Login-Versuch drinsteht?
-
1. Ich möchte aber verhindern, das der Nicht-Admin-User garnicht erst die Möglichkeit hat, die FORMs, die für den ADMIN bestimmt sind, zu sehen! Die Admin-FORMs kann man über einen Menüeintrag aufrufen. Diesen Eintrag lasse ich vom Programm auf Enabled->true/false stellen (je nach angemeldeten User).
Die Hart-Kodierung im Programm scheint mir irgendwie nicht optimal. Einerseits würde eine Änderung des Admin-Namens ein Neukompilierung erforderlich machen,...
Warum soll man denn den Benutzernamen ADMIN ändern? Reicht es nicht aus, das Passwort ändern zu können?
ausserdem steht der Name möglicherweise im Klartext in der Exe, und schlussendlich kann die Params-Property kann ja nicht nur gelesen sondern auch geschrieben werden, könnte also durch einen Programmfehler falsche Daten enthalten
Das mit dem Name in Klartext... naja, ich glaube es macht sich in meinem Fall niemand die Mühe, den Namen aus der Exe zu extrahieren

Wenn durch einen Programmfehler die Params-Prop. einen falschen Eintrag haben sollten, funzt wolmöglich das gesamte Programm nicht. Es stürzt ab... (dann hab ich doch mal wieder eine Zusatzaufgabe :p ).Hast du wenigstens mal kontrolliert, ob und was da nach einem fehlgeschlagenen Login-Versuch drinsteht?
Ein fehlgeschlagener Login lässt das Programm einfach beenden...
-
torsten_156 schrieb:
1. Ich möchte aber [erreichen], das der Nicht-Admin-User garnicht erst die Möglichkeit hat, die FORMs, die für den ADMIN bestimmt sind, zu sehen!
Ich verstehe, was du meinst. Nur schien es mir auf den ersten Blick bedenklich, sich für eine lokale Funktionalität auf die Authentifizierung bei einem entfernten System zu verlassen. Allerdings kann ich meine Bedenken momentan nicht überzeugend in Worte fassen, also ignoriere sie am besten einfach.

-
Hi,
ich muß zugeben, dass ich das für meine Admin-Funktionen auch nicht anders handhabe. Bestimmte Menüeinträge werden nur mit dem Admin-Login visible und enabled gesetzt... Der Admin-Name ist in unserem PPS-System vom Hersteller sogar fest vorgegeben und darf nicht geändert werden.
@Torsten: Welche Version von IB setzt Du ein? Wenn es die kostenlose Version ist (6,x, glaub' ich), solltest Du Dir mal Firebird ansehen. Ist als Open Source Projekt aus IB entstanden. Dort sind viele der Bugs behoben, die sonst erst in der kostenpflichtigen IB 7.x korrigiert wurden.