Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Statement in Rules

  1. #1
    marczie ist offline Neuer Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    7

    Standard Statement in Rules

    Hallo
    Ich muss gewisse Tabellen loggen was auf diesen abgeht, d.h. Wer mit welchem Befehl (Insert, Update, Select, Delete), wann auf die Tabelle zugegriffen hat. Ich habe es versucht mit Trigger und mit Rules. Bei den Triggers fehlt mir die Möglichkeit Selects abzufangen und bei Rules habe das Problem, dass ich nicht weiss ob es eine Variable für das ganze SQL-Statement gibt und wenn ja wie diese Variable heisst. Ich fülle im Moment eine Tabelle

    create table dbprot
    (
    prokey bigserial not null,
    prouser varchar(20) not null,
    prodate timestamp not null,
    proaction varchar(20) not null,
    protable varchar(20) not null,
    proold text,
    pronew text,
    primary key (prokey)
    );

    mit mehreren Rules wie diese

    create rule r_jou_ins as on insert to jou
    do insert into dbprot values (DEFAULT, current_user, current_timestamp, 'insert', 'jou', '', NEW);

    Woher bekomme ich das SQL-Statement, denn wir haben die Anforderung erhalten das SQL-Statement mit in diese Tabelle zuschreiben.? Gibt es da eine allgemeine Variable wie z.B. current_user?

    Wenn es da keine Möglichkeit gibt, wie könnte man eine Log oder Logdatei für mit all dieser SQL-Statements für gewisse Tabellen, denn es müssen nicht alle Tabellen geloggt werden?
    Über den Log-Mechanismus der DB kann leider nicht gefiltert werden welche Tabellen geloggt werden sollen. Wenn wir dieses Log für alle Statements einschalten würden, gäbe es eine riesige Menge an Daten die dann zu Gross wäre.


    Danke! marzie

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von marczie Beitrag anzeigen
    Hallo
    Ich muss gewisse Tabellen loggen was auf diesen abgeht, d.h. Wer mit welchem Befehl (Insert, Update, Select, Delete), wann auf die Tabelle zugegriffen hat. Ich habe es versucht mit Trigger und mit Rules.
    Falls Du nicht darauf bestehen solltest, das Rad wiederholt zu erfinden, sei Dir

    Code:
    13:25 < akretschmer> ??tablelog
    13:25 < pg_docbot_adz> For information about 'tablelog' see:
    13:25 < pg_docbot_adz> http://andreas.scherbaum.la/blog/archives/100-Log-Table-Changes-in-PostgreSQL-with-tablelog.html
    13:25 < pg_docbot_adz> http://pgfoundry.org/projects/tablelog/
    ans Herz gelegt. Allerdings kann auch das nicht zaubern und deswegen kann es keine Selects loggen. Wenn Du das wirklich willst, wirst Du Deinen Usern die Rechte zum Select wegnehmen und dafür Funktionen schreiben müssen, die nebenbei das Loggen mit übernehmen und ansonsten als SRF die Tabelle liefern.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    marczie ist offline Neuer Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    7

    Standard

    Hallo Andreas

    Klar will ich nicht das Rad nochmal erfinden.

    Hab ich das richtig verstanden, dass dieses log_table weder den select noch das SQL-Statement loggen kann.

    Marc

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von marczie Beitrag anzeigen
    Hallo Andreas

    Klar will ich nicht das Rad nochmal erfinden.

    Hab ich das richtig verstanden, dass dieses log_table weder den select noch das SQL-Statement loggen kann.

    Marc
    tablelog.

    Ja, es gibt keine Trigger auf Select, daher ist das auch nicht triggerbasiert loggbar. Und das exakte SQL ist auch nicht mehr sichtbar. Warum soll das überhaupt geloggt werden?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    marczie ist offline Neuer Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    7

    Standard

    Unsere Auftraggeber wollen gewisse Tabellen, die sensible Daten enthalten, loggen wer, wann, was erfasst, geändert, gelöscht und eben auch selektiert hat. Damit Nachträglich recherchiert werden kann wer, nach welchen Daten gesucht hat. Und das wenn möglich auf der DB-Ebenen, da ja die Applikations-Ebene mit sogenannten SQL-Tools umgangen werden können.

    Marc

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von marczie Beitrag anzeigen
    Unsere Auftraggeber wollen gewisse Tabellen, die sensible Daten enthalten, loggen wer, wann, was erfasst, geändert, gelöscht und eben auch selektiert hat. Damit Nachträglich recherchiert werden kann wer, nach welchen Daten gesucht hat. Und das wenn möglich auf der DB-Ebenen, da ja die Applikations-Ebene mit sogenannten SQL-Tools umgangen werden können.

    Marc
    Ich nannte dazu die Antworten. Für Datenmanipulation erfüllt ads sein tablelog den Zweck, für Select-Abfragen die Tabellen halt nicht zugänglich machen und Zugriff nur via Funktionen gestatten, security definer. Möglicherweise bietet das neue 8.4 mit den SE-Zusätzen (falls das denn kommt) da mehr & bessere Möglichkeiten, vielleicht ist auch das hier was für Dich:

    Code:
    6:13 < akretschmer> ??veil
    16:13 < rtfm_please> For information about veil
    16:13 < rtfm_please> see http://veil.projects.postgresql.org/curdocs/index.html
    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    So ein generelles Audit ist sehr kompliziert.

    Ein Ansatz wäre es, die Statements im Logfile mitzuschreiben.


    Aber an sich müsstest du für jedes SELECT auch mitloggen, welches Ergebnis zurückgegeben wurde, weil andernfalls du nicht mit Bestimmtheit sagen kannst, was derjenige gesehen hat.


    Das kann man, wie akretschmer gesagt hat, erreichen: man verbietet den direkten Zugriff auf die Tabellen und stellt definierte Funktionen bereit, die die Daten zurückliefern. Diese Funktionen kümmern sich dann auch um das Logging. Möglich ist das, nur aufwendig.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  8. #8
    marczie ist offline Neuer Benutzer
    Registriert seit
    09.03.2009
    Beiträge
    7

    Standard

    Hallo ads

    Dem Auftraggeber ist dies bewusst, aber Ihn interessiert mehr wie bzw. mit welchen Begriffen der Benutzer gesucht hat. Wenn wir wirklich allen Daten die gelesen werden noch zusätzlich Loggen müssten würde, es mind. das 100x an Logdaten generieren als es in der DB hat, da unsere Applikation so gewisse automatische und manuelle Refresh-Funktionen aufweisen wo der Benutzer mit einem Klick eine riesige Menge Daten neu liest.

    Mir scheint, dass ausser einem grossen Aufwand und workaround ist der Wunsch meines Auftraggebers nicht wirklich so realisierbar.

    Wenn euch mal noch was anderes einfällt bin ich bereit auch dies auszuprobieren.
    Danke!

    Marc

  9. #9
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Queries kann man wie gesagt loggen, das ist ohne Probleme möglich.
    Man kann nur nicht loggen, was genau zurückgeliefert wurde.

    Für weitere Antworten braucht es schon mehr Spezifikationen, was sich dein Auftraggeber wünscht.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Queries kann man wie gesagt loggen, das ist ohne Probleme möglich.
    Man kann nur nicht loggen, was genau zurückgeliefert wurde.

    Für weitere Antworten braucht es schon mehr Spezifikationen, was sich dein Auftraggeber wünscht.
    Nun, wenn man das via SRF kapselt, dann könnte die SRF auch loggen, was diese liefert.
    Schön ist allerdings was anderes.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. verschachteltes SQL-Statement
    Von m0rpheu5 im Forum SQL
    Antworten: 4
    Letzter Beitrag: 06.08.2009, 11:57
  2. Frage Trigger & SQL Statement
    Von Nuadu im Forum PL/pgSQL
    Antworten: 10
    Letzter Beitrag: 06.04.2009, 09:11
  3. Antworten: 2
    Letzter Beitrag: 22.09.2008, 17:35
  4. Wo kann ich die Rules finden?
    Von petra im Forum PGAdmin
    Antworten: 2
    Letzter Beitrag: 11.07.2007, 16:47
  5. Trigger und Rules kommen sich in die Quere
    Von rolf.schaufelberger im Forum Trigger und Funktionen
    Antworten: 0
    Letzter Beitrag: 06.10.2006, 18:27

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum