如果失败的登录尝试次数超过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;
答案 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;
/
答案 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() )