Ich suchte nach einer Möglichkeit eine bestimmte Spalte einer MySQL-Zeile bei einem erfolgreichen SELECT zu aktualisieren. Hintergrund: ich habe eine Tabelle mit Netzbereichen, von welchen meine Postfix-Server Verbindungen ablehnen sollen. Dort gibt es eine Spalte (active) mit einem Zeitstempel. Diese wollte ich bei jedem erfolgreichen SELECT aktualisieren, damit ich anhand dieser Spalte Einträge ermitteln kann, welche schon länger „nicht mehr gebraucht“ wurden.
Der „einzige“ Weg dafür ist ein PROCEDURE auf der Tabelle, welches erst eine UPDATE und dann den notwendigen SELECT macht. Bei mir geht es um die Tabelle postfix
.blacklist-cidr
mysql -uroot -pGEHEIM delimiter // CREATE PROCEDURE postfix.block (IN ip VARCHAR(15)) BEGIN UPDATE `blacklist-cidr` SET `active` = NOW() WHERE INET_ATON(ip) BETWEEN network AND broadcast; SELECT 'reject' FROM `blacklist-cidr` WHERE INET_ATON(ip) BETWEEN network AND broadcast; END; // delimiter ;
Danach kann der Postfix das PROCEDURE folgendermassen ausführen
hosts = 10.66.99.2 10.66.99.1 user = postfix password = london21 dbname = postfix query = CALL postfix.block('%s')