![]() |
Datenbank: MariaDB • Version: 10.1.13 • Zugriff über: FireDac
Trigger auf Datenbankebene?
Hallo, ich habe folgendes Anliegen, das zunächst ganz trivial erscheinen mag.
Vorab: Ich bin kein Datenbankexperte. Ich möchte das bei gewissen Tabellenoperationen(insert, update...) etwas in diesen Datensatz geschrieben wird. Typische Funktion für einen (tabellenbezogenen) Trigger. Nun will ich aber im Nachhinein nicht bei ein paar Hundert Tabellen einen Trigger hinterlegen. Ich hätte gerne das ich das eine Ebene höher einmalig hinterlege: in der Datenbank an sich. Wie kann ich also auf der Datenbankebene das Ereignis "User xx hat in der Tabelle yy einen Datensatz hinzugefügt" abfangen um dann wiederum auf diese Tabelle/Datensatz zuzugreifen und entsprechende Einträge(z.B. Username und Datum) vorzunehmen. (Mein Ansatz: Die Datenbank überwacht doch soweiso alles was in den Tabellen passiert - über z.B. die Sicherheit. Aber WIE zapf ich das an?) Danke für eure Hilfe. |
AW: Trigger auf Datenbankebene?
Ich wüsste jetzt nicht, dass sowas im SQL geht.
Aber du kannst dir über ein SELECT alle Tabellen auflisten lassen und dann für jede Tabelle ein CREATE TRIGGER ausführen und so deine Trigger-Funktion überall dran hängen. |
AW: Trigger auf Datenbankebene?
Mein Problem ist das ich in den Datensatz den Benutzername eintragen will. Dieser ist aber der Name mit der er sich in der Anwendung
angemeldet hat und nicht der mit dem in der Datenbank angemeldet ist. Ich müsste also dem (Tabellen)Trigger einen Parameter übergeben(Username) - und da scheitere ich. Ich hatte die Idee eine "Übersetzungspabelle" beim Anmelden in die Anwendung zu pflegen. Da steht dann drin dass der Datenbankuser_xx den Anwendung_Username_yy hat(wird beim ausloggen wieder gelöscht). Der Trigger sollte nun in dieser Tabelle nachschauen wie der Anwendung_Username lautet und diesen Namen dann in den betroffenen Datesatz posten. Da die Einträge in jeder Tabelle identisch sind(Name, Datum) brauche ich nur einen Trigger (oder eine SP). |
AW: Trigger auf Datenbankebene?
Zitat:
Ich glaub aber mit Deiner Trigger-über-alle-Tabellen-Idee sieht es schlecht aus. Das wirst Du einzeln machen müssen. |
AW: Trigger auf Datenbankebene?
Im CREATE TRIGGER kann man je nach DBMS einen Funktions-Aufruf oder gar ein "beliebiges" SQL-Statement ausführen. (meistens sind die Trigger-Funktionen ohne Parameter und haben nur die impliziten Parameter wie NEW, OLD usw., aber man kann fast immer auch weitere Parameter in die Funktion einbauen und beim Aufruf übergeben)
Das wird aber alles User-unabhängig in der DB registriert und ausgeführt. Du könntest eine Session-Variable (falls MariaDB sowas kennt) nach dem DB-Connect setzten und Diese in dem Trigger verwenden. |
AW: Trigger auf Datenbankebene?
Wäre ein zentrales BeforePost-Event auf Programmebene eventuell eine Alternative? Das wäre zudem noch datenbankunabhängig.
|
AW: Trigger auf Datenbankebene?
Ich würde es im Programm realisieren: In deiner Zugriffskomponente (vermutlich Query) gibt es das Event BeforePost, hier kannst du den Benutzernamen ermitteln und in die gewünschten Tabellenfelder eintragen.
Grüße Mikhal Da war einer schneller... |
AW: Trigger auf Datenbankebene?
Zitat:
Was genau meinst du mit "weitere Parameter"? Man kann dem Trigger ohne Umwege ja keine Parameter übergeben. Oder meinst du damit eine Funktion/Prozedur die innerhalb eines Triggers aufgerufen wird? |
AW: Trigger auf Datenbankebene?
Mit MariaDB hast Du da wohl schlechte Karten
Zitat:
|
AW: Trigger auf Datenbankebene?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz