AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

User identifizieren

Ein Thema von Der Jan · begonnen am 4. Jan 2006 · letzter Beitrag vom 4. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#1

User identifizieren

  Alt 4. Jan 2006, 11:25
Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus
Hallo miteinander.

Ich habe ein programm, welches mit einer Firebird-DB zusammenarbeitet. Nun möchte ich, quasi aus Sicherheitsgründen, bestimmte Aktionen mitprotokollieren. So frei nach dem Motto "welcher User löscht/ändert wann was an welcher Tabelle".
Aus diesem Grunde habe ich mir ein paar Trigger geschrieben, welche diese Protokollfunktion übernehmen und entsprechende Daten in eine separate Tabelle schreiben.
Mein Problem ist jetzt folgendes: Nicht für jeden User, der sich am Programm anmeldet, ist ein eigener DB-user angelegt, vielmehr erfolgt die Rechte-Verwaltung im Programm. Wie kann ich jetzt datenbankseitig erkennen, welcher User sich gerade hier zu schaffen macht? "CURRENT_USER" geht ja hier nicht wirklich...
Gruß, Jan
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#2

Re: User identifizieren

  Alt 4. Jan 2006, 13:17
Hallo Jan,

das ist unter FB 1.5 mit ein wenig Aufwand verbunden (FB2 soll besser werden) aber mit
CURRENT_CONNECTION lösbar.
Das Programm muß sicherstellen, daß nach dem CONNECT ein Eintrag in die Tabelle z.B. "BENUTZER",
mit mindestens den Feldern Benutzername und CONNECTION_ID, erfolgt.
Dh. wenn schon ein Eintrag mit diesem Benutzer existiert dann wird nur die CONNECTION_ID
upgedated (schönes Wort) wenn nicht, dann ein Insert mit Benutzername+CONNECTION_ID.
Das läßt sich am besten mit einer SP lösen.

Die Protokoll-Tabelle erhält einen Before-Insert-Trigger. Über die Variable CURRENT_CONNECTION
wird in der Benutzertabelle der Eintrag mit der passenden CONNECTION_ID gesucht und der dazugehörenden
Benutzername in die Protokoll-Tabelle eingetragen.

Damit muß man nur noch die zu protokollierenden Daten in die Protokoll-Tabelle eintragen.
Der Benutzer wird automatich hinzugefügt.

alex
Alexander
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: User identifizieren

  Alt 4. Jan 2006, 13:29
Zwischenfrage hierzu :

Zitat von alex517:
Das Programm muß sicherstellen, daß nach dem CONNECT ein Eintrag in die Tabelle z.B. "BENUTZER" mit mindestens den Feldern Benutzername und CONNECTION_ID, erfolgt.
Wo kriege ich das her ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#4

Re: User identifizieren

  Alt 4. Jan 2006, 13:39
Danke. Wenn dieser Wert gleich bleibt, solang eine Verbindung besteht, ist CURRENT_CONNECTION genau das, sein was ich gesucht habe.
Gruß, Jan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: User identifizieren

  Alt 4. Jan 2006, 13:41
Über Kontextvariable CURRENT_CONNECTION kann nicht auf einen User geschlossen werden, da sie nur währeend einer Verbindung gültig ist.
In Firebird 2 wurden neue Kotextvariablen eigeführt. U.A. gibt es neue Kontextvariable CLIENT_ADDRESS im Bereich SYSTEM, welche die IP des Clientrechners enthält oder im Bereich 'USER_SESSION' die Variable APP_LOGIN.

 select RDB$get_context( 'SYSTEM', 'CLIENT_ADDRESS');
Markus Kinzler
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#6

Re: User identifizieren

  Alt 4. Jan 2006, 13:42
Zitat von Hansa:
Zwischenfrage hierzu :

Zitat von alex517:
Das Programm muß sicherstellen, daß nach dem CONNECT ein Eintrag in die Tabelle z.B. "BENUTZER" mit mindestens den Feldern Benutzername und CONNECTION_ID, erfolgt.
Wo kriege ich das her ?
Was?
Tabelle? mit CREATE TABLE APP$BENUTZER .... SP? mit
SQL-Code:
CREATE PROCEDURE SP_APP$LOGIN (
    USER_KUERZEL VARCHAR(10),
    USER_NAME VARCHAR(40),
    USER_LOCATION VARCHAR(40))
RETURNS (
    USER_ID INTEGER,
    CONNECT_ID INTEGER,
    CONNECT_RESULT INTEGER)
AS ...
und gleich nach dem Connect SP_APP$LOGIN ausführen.
alex
Alexander
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#7

Re: User identifizieren

  Alt 4. Jan 2006, 13:48
Zitat von Der Jan:
Danke. Wenn dieser Wert gleich bleibt, solang eine Verbindung besteht, ist CURRENT_CONNECTION genau das, sein was ich gesucht habe.
wärend der Verbindung schon, danach aber nicht mehr. CURRENT_CONNECTION ist nur die fortlaufende Nummer. Um an den Namen den Benutzers zu kommen muß man den Umweg über eine Benutzertabelle machen.
alex
Alexander
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: User identifizieren

  Alt 4. Jan 2006, 13:50
Ich bräuchte eher den Rumpf von der SP, nicht den Kopf. Wo kriege ich denn die richtigen Rückgabewerte her ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#9

Re: User identifizieren

  Alt 4. Jan 2006, 13:54
Zitat von alex517:
Zitat von Der Jan:
Danke. Wenn dieser Wert gleich bleibt, solang eine Verbindung besteht, ist CURRENT_CONNECTION genau das, sein was ich gesucht habe.
wärend der Verbindung schon, danach aber nicht mehr. CURRENT_CONNECTION ist nur die fortlaufende Nummer. Um an den Namen den Benutzers zu kommen muß man den Umweg über eine Benutzertabelle machen.
alex
Hab ich schon verstanden Ist aber kein Problem, da ich eh ne Userverwaltung habe...
Gruß, Jan
  Mit Zitat antworten Zitat
Benutzerbild von Der Jan
Der Jan

Registriert seit: 22. Dez 2005
289 Beiträge
 
Delphi XE7 Ultimate
 
#10

Re: User identifizieren

  Alt 4. Jan 2006, 14:20
Zitat von Hansa:
Ich bräuchte eher den Rumpf von der SP, nicht den Kopf. Wo kriege ich denn die richtigen Rückgabewerte her ?
IMHO sind die Rückgabewerte nicht wirklich von Belang hier, ist wohl eher als beispiel gedacht.

SQL-Code:
CREATE PROCEDURE LOG_USER(USER_ID INTEGER)
AS
DECLARE VARIABLE ANZ INTEGER;
BEGIN
  SELECT COUNT(USERID) FROM USERLOG WHERE USERID = :USER_ID INTO :ANZ;
  IF(ANZ = 0) THEN
    INSERT INTO USERLOG (USERID, CONNID) VALUES (:USER_ID, CURRENT_CONNECTION);
  ELSE
    UPDATE USERLOG SET CONNID = CURRENT_CONNECTION WHERE USERID = :USER_ID;
END
So siehts jetzt bei mir aus. Meine Tabelle USERLOG enthält nur USERID (wegen eigener Userverwaltung, da gibbet eindeutige IDs) und CONNID.


Zitat von alex517:
mit mindestens den Feldern Benutzername und CONNECTION_ID, erfolgt.
Mir ist gerade aufgefallen, das CONNECTION_ID im IBExpert ein "reserviertes Wort" ist. Ist die Benennung von dir Zufall oder hat das eine tieferen Sinn?
Gruß, Jan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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