如何编写触发器例如base

时间:2016-06-02 19:57:04

标签: mysql

如果失败的登录尝试次数超过3但我完全不知道如何操作,我必须编写一个锁定用户帐户的触发器:/请帮助解决此示例。

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;

2 个答案:

答案 0 :(得分:0)

您可以使用此触发器:

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

答案 1 :(得分:0)

首先,您应该考虑一段时间后是否会释放此用户。因此,您必须保存用户锁定的日期时间,并考虑为其生存的时间。

我建议你使用一个日志表来记录所有登录失败的尝试。然后,在每个插入上创建一个触发器,并计算最后一分钟的登录尝试次数。如果超过5次尝试,则在用户表上运行更新,设置blocked = 1和blocked_until = now()+ 5分钟。

在您的登录脚本中,您必须构建一个SQL查询,如:

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