Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Angemeldete Nutzer und geöffnete Datenbank ermitteln (https://www.delphipraxis.net/144420-angemeldete-nutzer-und-geoeffnete-datenbank-ermitteln.html)

DirkG 7. Dez 2009 15:58

Datenbank: Interbase • Version: 6.0 • Zugriff über: IBX

Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Hallo DP'ler.

Ich habe wieder mal ein Problem. Wir wollen in einem Monitoring Tool feststellen, welche Benutzer auf einem Interbase Server eingerichtet sind, ob sie momentan online sind und mit welcher Datenbank sie verbunden sind.

Benutzer ermitteln ist mit IBSecurityService kein Problem.

Für die Ermittlung welche User Online sind, wollten wir IBServerProperties mit FetchDatabaseInfo eine Liste der Datenbanken ermitteln und da ging es los. Laut F1 sollte es mit folgendem Code möglich sein, eine Liste der Datenbanken eines Server zu bekommen. Es passiert aber nichts

Delphi-Quellcode:
  with IBServerProperties1 do begin
    ServerName := 'localhost';
    LoginPrompt := False;
    Params.Add('user_name=SYSDBA');
    Params.Add('password=masterkey');
    Active := True;
    try
      Options := [Database];
      FetchDatabaseInfo; // bis hier alles ok
      for i:= 0 to High(DatabaseInfo.DbName) do // DatabaseInfo ist leer ???
        User.Database:= DatabaseInfo.DbName[i];
    finally
      Active := False;
    end;
  end;
User.Database ist eine Stuktur zur Aufnahme der Daten

Woran liegt es, das DatabaseInfo leer bleibt? Hat jemand von euch schon mal sowas gemacht?

hoika 7. Dez 2009 16:16

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Hallo,

Zitat:

eine Liste der Datenbanken eines Server zu bekommen
Wie soll denn das gehen ?
Man kann doch beliebige Datenbanken irgendwohin auf den Server legen.

c:\temp\data.gdb
c:\temp1\data.gdb

Es wird die Liste der aktuellen geöffneten (connected) Datenbanken zurückgegeben,
siehe auch hier

1

gaaaanz unten.



Heiko

DirkG 7. Dez 2009 16:29

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
OK. Ich kann also nur festellen, welche Datenbankdatei gerade geöffnet (connected) ist.
Ich wage aber einzuwerfen, das die IB Console es schafft alle registrierten Datenbanken eines Servers anzeigen. Wie machen die das dann?

hoika 7. Dez 2009 16:34

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Hallo,

Zitat:

das die IB Console es schafft alle registrierten Datenbanken eines Servers anzeigen
Beweise ? ...

Das Registrieren per IBConsole erfolgt lokal.
Es werden pro DB ein paar Daten (User, Pass, Pfad) lokal abgelegt
und zwar nur zur Nutzung mit IBConsole selber.
Das hat mit dem Server nix zu tun.

Damit kann die DB in IBConsole schnell wieder geöffnet werden,
ohne die Daten noch mal einzugeben.

Ich kann eine DB auch dann Öffnen,
wenn Sie nicht per IBConsole registriert wird.

Das ist ungefähr vergleichbar mit einer Desktop-Verknüpfung.


Heiko

DirkG 7. Dez 2009 16:42

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
:oops: Typischer Anfänger Fehler oder wie mein Chef sagt: "Die meisten Fehler liegen zwischen den Augen.

Ich denke ich werde mich noch einmal in die Doku von IB vergraben und einen neuen Lösungsansatz suchen.

Trotzdem es keine Lösung gab. Danke!

hoika 7. Dez 2009 16:58

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Hallo,

ich würde das anders machen.

Unter C:\Programme \ XXX \ DelphiX\Demos\Db\IBX\Admin

gibt es ein Bsp.-Programm, was u.a. zeigt, wie man die User ermittelt.

Anmeldung über TCP-IP (nicht Local).

Wie ich schon geschrieben hatte,
geht es gar nicht, alle Datenbanken
auf dem Server durch Interbase/Firebird ermitteln zu lassen.
Das wäre ja ein "Full Table Scan" auf den Server-Platten,
weil die GDB/FDB (oder auch einfach nur DATA.DAT) überall liegen kann).


Heiko

PS: Es geht hier um Interbase, also lassen wird mal die aliases.conf
von FireBird ausser acht.

DirkG 7. Dez 2009 17:22

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Danke für den Tip. Leider habe ich die Demo's nicht installiert.

Zitat:

Wie ich schon geschrieben hatte,
geht es gar nicht, alle Datenbanken
auf dem Server durch Interbase/Firebird ermitteln zu lassen.
:zwinker: Habe ich schon begriffen. Deswegen meine Aussage über die Suche eines neuen Lösungsansatz. Vieleicht müssen wir ja die ganze Monitoring Sache überdenken (Funktionsumfang etc.)

neo4a 7. Dez 2009 17:37

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Wenn man etwas Overhead in Kauf nimmt, dann kann man soetwas selbst implementieren, bspw. um immer nur eine bestimmte Anzahl von Benutzern Zugriff auf eine DB zu erlauben.

Um die Sicherheit Deiner IB/FB-DB-Zugriffe zu gewährleisten, hast Du ja sicher schon das 2-Phasen-Login implementiert. Dabei verbinden sich die User immer erst einmal mit einem 1. Login und mit einer einheitlichen und geheimen User/Passw-Kombi mit dem DB-Server, um sich dann pro DB mit der eigentlichen Benutzernamen/Passw.-Kombi zu authentifizieren. Falls das passt, gibt's das 2. Login nun mit dem "offiziellen" Usernamen und gerne auch einem anderen Passwort. Mit letzterem gelingt keinem super-erfahrenen User mehr der Zugriff auf den DB-Server via ODBC oder andere Wege über die ihm bekannte User/Passw-Kombi.

In Analogie zu obiger Vorgehensweise kann man sich beim Erstkontakt zuerst eine Liste der erlaubten DB holen, die ihrerseits praktischerweise in einer DB gehalten wird. Ich mach das mittels eines eigenen Admin-Tool, womit gerade in diese DB die Pfad/Namen bzw. Aliasnamen hinterlegt werden. (Das ist dann erweiterbar auf eine Liste erlaubter Nutzer pro DB etc.).

Nach diesem schemtaischen Aufbau habe ich nun eine Liste der verfügbaren DBs, samt der erlaubten Benutzer. Nun muss ich nur noch zu jeder DB eine Verbindung herstellen und kann die tatsächlich verbundenen User ermitteln. Dem Benutzer kann ich außerdem beim Login eine zentral vorkonfigurierte Liste der verfügbaren Datenbanken anbieten.

Wie schon in den vorherigen Antworten dargestellt, gibt es keinen IB/FB-Mechanismus "out-of-the-box" dafür; es lässt sich aber leicht eine eigene Lösung implementieren, die dann genau das leistet, was benötigt wird.

--
Andreas

hoika 7. Dez 2009 18:45

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Hallo,

zum Abschluss.

HK-Software hat ein Tool zum Loggen entwickelt (Interbase Monitor),
dort läuft das so, dass der Client sich am Port 3050 anmeldet,
dort hängt aber der Monitor, protolliert alles mit
und schickt es weiter zum eigentlichen Server (z.B. 3050).

Die beiden Ports waren jetzt ein Bsp.


Heiko

neo4a 7. Dez 2009 19:50

Re: Angemeldete Nutzer und geöffnete Datenbank ermitteln
 
Zitat:

Zitat von hoika
(Interbase Monitor)

Das Tool löst nicht die Anforderungen des OP, denn Portmapping und Logging auf Paketebene informiert kaum, welche DBs verfügbar sind und wer aktuell mit welcher DB verbunden ist.

--
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 Uhr.
Seite 1 von 2  1 2      

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