如何解决有没有一种方法可以监视是否将数据手动插入数据库,而不是通过系统例如ef核心
这可能是一个愚蠢的问题,我对数据库触发器进行了一些研究,发现它们在监视数据库更改方面非常有用。这是我发现的用于监视数据库中相似性质的创建,更改和更改的脚本:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ChangeLog](
[Id] [INT] IDENTITY(1,1) NOT NULL,[DatabaseName] [VARCHAR](256) NOT NULL,[EventType] [VARCHAR](50) NOT NULL,[ObjectName] [VARCHAR](256) NOT NULL,[ObjectType] [VARCHAR](25) NOT NULL,[SqlCommand] [VARCHAR](MAX) NOT NULL,[EventDate] [DATETIME] NOT NULL,[LoginName] [VARCHAR](256) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [Admin].[ChangeLog] ADD CONSTRAINT [DF_EventsLog_EventDate]
DEFAULT (GETDATE()) FOR [EventDate]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [backup_objects]
ON DATABASE
FOR CREATE_PROCEDURE,ALTER_PROCEDURE,DROP_PROCEDURE,CREATE_TABLE,ALTER_TABLE,DROP_TABLE,CREATE_FUNCTION,ALTER_FUNCTION,DROP_FUNCTION,CREATE_VIEW,ALTER_VIEW,DROP_VIEW
AS
SET NOCOUNT ON
DECLARE @data XML
SET @data = EVENTDATA()
INSERT INTO changelog(databasename,eventtype,objectname,objecttype,sqlcommand,loginname)
VALUES(
@data.value('(/EVENT_INSTANCE/DatabaseName)[1]','varchar(256)'),@data.value('(/EVENT_INSTANCE/EventType)[1]','varchar(50)'),@data.value('(/EVENT_INSTANCE/ObjectName)[1]',@data.value('(/EVENT_INSTANCE/ObjectType)[1]','varchar(25)'),@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]','varchar(max)'),@data.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(256)')
)
GO
ENABLE TRIGGER [backup_objects] ON DATABASE
GO
但是,我需要查看是否有人通过脚本或“编辑前200行”将数据手动插入了数据库。如果有人可以对此提供一些见识,那将非常有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。