Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在SQL Server 2008中记录给定数据库的所有表中插入/更新/删除的行_Database_Sql Server 2008_Database Administration_Audit Trail - Fatal编程技术网

Database 在SQL Server 2008中记录给定数据库的所有表中插入/更新/删除的行

Database 在SQL Server 2008中记录给定数据库的所有表中插入/更新/删除的行,database,sql-server-2008,database-administration,audit-trail,Database,Sql Server 2008,Database Administration,Audit Trail,在SQL Server 2008中,跟踪/记录给定数据库的所有表中插入/更新/删除的行的最佳方法是什么 或者SQL Server 2008中是否有更好的审计功能?我不记得是否已经有了一些用于此功能的工具,但您可以始终使用触发器,这样您就可以访问已更改行的时态表-插入和删除。不幸的是,如果您想跟踪所有表,那么这可能是一项相当艰巨的工作。我认为应该有一些更简单的解决办法,但我不记得我说过的 编辑 也许这会有帮助: -变更跟踪 这允许您在数据库级别进行审计;这可能足以满足业务需求,也可能不足以满足业

在SQL Server 2008中,跟踪/记录给定数据库的所有表中插入/更新/删除的行的最佳方法是什么


或者SQL Server 2008中是否有更好的审计功能?

我不记得是否已经有了一些用于此功能的工具,但您可以始终使用触发器,这样您就可以访问已更改行的时态表-插入和删除。不幸的是,如果您想跟踪所有表,那么这可能是一项相当艰巨的工作。我认为应该有一些更简单的解决办法,但我不记得我说过的

编辑

也许这会有帮助: -变更跟踪

这允许您在数据库级别进行审计;这可能足以满足业务需求,也可能不足以满足业务需求,因为如果没有将数据库记录粘合在一起的逻辑,数据库记录通常就没有多大意义。例如,知道用户x使用项目的外键将记录插入time_booked表,如果没有SQL查询将这4个表粘合在一起,用户、time_状态表可能就没有多大意义


您可能还需要让每个数据库用户使用自己的用户ID进行连接-这对于集成的安全性和客户端应用程序很好,但可能无法与使用连接池的网站一起使用。

旨在实现您想要的功能,但它需要单独设置每个表,因此根据您拥有的表的数量,可能会有一些物流。默认情况下,它还将只在捕获表中存储数据几天,因此您可能需要SSIS包将其取出并存储更长的时间。

sql server日志无法像这样进行分析。有一些第三方工具可用于读取日志,但据我所知,您无法查询它们的统计信息等。如果您需要此类信息,则必须创建某种审计,以在单独的表中捕获所有这些事件。您可以使用DDL触发器。

简而言之,没有一种解决方案适合所有人。这取决于系统和需求,但这里有两种不同的方法

DML触发器

相对容易实现,因为您必须编写一个适合于一个表的表,然后将其应用于其他表

缺点是,当您有很多表和更多触发器时,它可能会变得混乱。为200个表管理600个触发器每个表插入、更新和删除触发器不是一件容易的任务。 此外,它可能会对性能造成影响

更改数据捕获

非常容易实现,本机支持,但仅限于enterprise edition,这可能会花费大量美元;。另一个缺点是CDC还没有像它应该的那样进化。例如,如果更改模式,历史数据将丢失

事务日志分析

这样做的最大好处是,您只需将数据库置于完全恢复模式,所有信息都将存储在事务日志中 但是,如果您想正确地执行此操作,则需要第三方日志读取器,因为本机不支持此操作

如果您想实现这一点,我建议您尝试一些现有的第三方工具。我使用了ApexSQL中的两个工具,但也有来自和的好工具

–通过读取事务日志进行审核

–在后台使用跟踪,然后解析这些跟踪并将结果存储在中央数据库中


免责声明:我与上述任何公司均无关联。

SQL Server 2008的哪个版本?如果Enterprise按照其在tin.SQL Server 2008 Enterprise上的说明进行操作。不是R2。CDC可以,但它不能捕获审核所需的所有内容。@HLGEM:如果我只关心删除,CDC是否足够好?取决于您是否需要捕获数据本身或其他相关数据,例如谁进行了删除。有效点。但是,在这个特定场景中,我们不想跟踪太深。触发器,是的。对任何好的第三方工具都不满意。有你极力推荐的吗?