排查数据库,表中字段莫名被更新原因

背景:最近数据库员工表中,有些男性员工的性别会突然被更新为女

首先,只有男的会更新为女,女的不会更新为男;

初步排查:对项目更新员工表的sql进行排查,未发现问题 ,找另一个公用数据库的项目排查,也未发现问题;

添加监听器,对修改员工表性别进行监听,记录下修改人员ID,修改时间

CREATE trigger [dbo].[Trigger_Update]
on Base_Employee
after update
as
if update(Gender)
begin
declare @Gender int
declare @EmpId varchar(50)
select @Gender=Gender,@EmpId=EmployeeId from deleted
select @Gender=Gender,@EmpId=EmployeeId from inserted
insert into hr_operation_log (operatLogId,name,menu_name,op_Date) VALUES(NEWID(),@EmpId,@Gender+’’,GETDATE())

排查到日志记录有修改性别

排查sqlserver 在插入日志时间内左右,执行的sql 日志,找到更新性别的sql语句

SELECT TOP
1000 QS.creation_time,
SUBSTRING (
ST.text,
( QS.statement_start_offset / 2 ) + 1,
(
( CASE QS.statement_end_offset WHEN - 1 THEN DATALENGTH( st.text ) ELSE QS.statement_end_offset END - QS.statement_start_offset ) / 2
) + 1
) AS statement_text,
ST.text,
QS.total_worker_time,
QS.last_worker_time,
QS.max_worker_time,
QS.min_worker_time
FROM
sys.dm_exec_query_stats QS CROSS APPLY sys.dm_exec_sql_text ( QS.sql_handle ) ST
WHERE
QS.creation_time BETWEEN ‘2020-11-13 14:02:07’
AND ‘2020-11-13 14:02:08’
AND ST.text LIKE ‘%%’
ORDER BY
QS.creation_time DESC;
排查数据库,表中字段莫名被更新原因
现在可以确定有update语句对数据库员工性别进行更新了;

通过sql语句中的更新字段,确定项目实际可能进行更新的地方;
最终排查到问题原因;