2016-06-02 11 views
1
schreiben

Ich muss einen Trigger schreiben, der ein Benutzerkonto sperrt, wenn die Anzahl der fehlgeschlagenen Anmeldeversuche 3 überschreitet, aber nicht weiß, wie zu tun:/Bitte helfen Sie in diesem Beispiel.Wie Trigger für Beispiel Base

CREATE DATABASE IF NOT EXISTS myAplicaction; 
USE mojaAplikacja; 
CREATE TABLE IF NOT EXISTS authorization(
     idUzytkownika INT PRIMARY KEY AUTO_INCREMENT, 
     login VARCHAR(50) NOT NULL, 
     password VARCHAR(64) NOT NULL, 
     liczbaNieudanychProb SMALLINT, 
     czasOstatniegoLogowania TIMESTAMP, 
     kontoZablokowane BOOLEAN 
    ); 

    INSERT INTO Autoryzacja SELECT NULL, "jkowalski", SHA2('pies', 256), 1, NULL, FALSE; 
    INSERT INTO Autoryzacja SELECT NULL, "mnowak", SHA2('kot', 256), 1, NULL, FALSE; 
    INSERT INTO Autoryzacja SELECT NULL, "kzablocki", SHA2('ptak', 256), 1, NULL, FALSE; 
    INSERT INTO Autoryzacja SELECT NULL, "lhostman", SHA2('ryba', 256), 1, NULL, FALSE; 
+0

„Locking“ eines Benutzerkontos ist die Geschäftslogik, die in der Datenbank-Ebene nicht wirklich gehören. – eggyal

+0

Können Sie erweitern, was Sie gerade brauchen? Ein Trigger wird verwendet, wenn eine Tabelle in irgendeiner Weise geändert wird. Wenn es eine Tabelle mit Anmeldeversuchen gibt, geben Sie diese bitte an, da der Trigger in dieser Tabelle platziert werden müsste, damit dies funktioniert. – kayla210

Antwort

0

Sie könnten diesen Trigger verwenden:

create trigger tr_upd_Autoryzacja before update on Autoryzacja for each row 
begin 
    if (new.liczbaNieudanychProb > 3) then 
     set new.kontoZablokowane := true; 
    end if; 
end; 
/

SQL fiddle

+0

Hat dies Ihre Frage beantwortet, oder können Sie etwas Feedback geben? – trincot

0

Zunächst einmal sollten Sie prüfen, ob dieser Benutzer nach einiger Zeit freigegeben werden. Sie müssen also die Datetime des Benutzers speichern, der ebenfalls gesperrt wird, und eine Zeit in Betracht ziehen, um dafür zu leben.

Ich würde Ihnen empfehlen, eine Log-Tabelle zu verwenden, in der Sie alle fehlgeschlagenen Anmeldeversuche protokollieren. Erstellen Sie dann für jeden Einsatz einen Trigger und zählen Sie die Anmeldeversuche in letzter Minute. Wenn es mehr als 5 Versuche gibt, führen Sie ein Update für die Benutzertabelle durch und setzen blocked = 1 und blocked_until = now() + 5 Minuten.

Auf Ihrem Login-Skript, müssen Sie eine SQL-Abfrage wie bauen:

select userid from users where login = 'userlogin' and password = 'password' and active = 1 and (blocked = 0 or blocked_until < now())