可以尝试用DDL触发器看看CREATE TRIGGER safety ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT 'You must disable Trigger "safety" to drop or alter tables!' ROLLBACK ;
主要创建表的语句就是这里, 其中@fieldvalue是企业编号,表是根据企业编号命名的,企业编号只会包含字母、数字及下划线 if not exists(select * from SYSOBJECTS where name=@fieldvalue) begin set @TempSql='create table '+@fieldvalue+'(DataTime datetime not null,PointCode varchar(20) not null,FactorID int not null,DataType int not null,dataValue decimal(18,8) null,ConvertValue decimal(18,8) null,StateValue varchar(1) null,WriteTime datetime null,DevCode varchar(10) null,constraint PK_'+@fieldvalue+' primary key (DataTime,FactorID))' exec(@TempSql) end
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK ;
主要创建表的语句就是这里, 其中@fieldvalue是企业编号,表是根据企业编号命名的,企业编号只会包含字母、数字及下划线
if not exists(select * from SYSOBJECTS where name=@fieldvalue)
begin
set @TempSql='create table '+@fieldvalue+'(DataTime datetime not null,PointCode varchar(20) not null,FactorID int not null,DataType int not null,dataValue decimal(18,8) null,ConvertValue decimal(18,8) null,StateValue varchar(1) null,WriteTime datetime null,DevCode varchar(10) null,constraint PK_'+@fieldvalue+' primary key (DataTime,FactorID))'
exec(@TempSql)
end
2、应用连接数据库账号权限仅授予读写、执行存储过程的权限
3、禁用sa,单独创建有sysadmin权限的账号,并专人保管
4、检查存储过程,确认没有drop这样的DDL操作
5、创建数据表监控,只每天监控一下数据表的大小即可;已经错过的场景无法重现了,只能亡羊补牢,做好后面的;