在 SQL Server 中创建审核触发器

2023-12-05

我需要对 SQL Server 2005 数据库中的两个表实施更改跟踪。我需要审核添加、删除、更新(详细说明更新内容)。我本来打算使用trigger这样做,但似乎很容易错误地做到这一点。

任何人都可以发布一个更新触发器的示例,以优雅的方式成功地完成此任务吗?我希望最终得到一个具有以下结构的审计表:

  • ID
  • LogDate
  • 表名
  • 事务类型(更新/插入/删除)
  • RecordID
  • 字段名
  • OldValue
  • NewValue

...想法?


我只想指出几点:

使用代码生成器您无法使用单个过程来跟踪所有表,您需要在每个跟踪表上生成类似但不同的触发器。这种工作最适合自动代码生成。在您的位置,我将使用 XSLT 转换从 XML 生成代码,并且可以从元数据自动生成 XML。这使您可以在每次更改审计逻辑/结构或添加/更改目标表时重新生成触发器,从而轻松维护触发器。

考虑容量规划用于审计。到目前为止,跟踪所有值更改的审计表将是数据库中最大的表:它将包含所有当前数据和 当前数据的所有历史记录。这样的表将使数据库大小增加 2-3 个数量级(x10、x100)。而审计表很快就会成为一切的瓶颈:

  • 每个 DML 操作都需要审计表中的锁
  • 由于审计,所有管理和维护操作都必须适应数据库的大小

考虑到架构变更。可以删除名为“Foo”的表,然后可以创建名为“Foo”的不同表。审计跟踪必须能够区分两个不同的对象。最好使用一个缓慢变化的维度方法。

考虑需要高效删除审计记录。当您的应用程序主题策略规定的保留期到期时,您需要能够删除到期的审核记录。现在看来这似乎没什么大不了的,但 5 年后,当第一条记录到期时,审计表已增长到 9.5TB,这可能是一个问题。

考虑需要查询审核。必须准备审计表结构以有效地响应审计查询。如果您的审计无法被查询,那么它就没有价值。查询将完全由您的需求驱动,并且只有您知道这些,但大多数审计记录都是按时间间隔(“昨天晚上 7 点到 8 点之间发生了什么变化?”)、按对象(“此记录在此记录中发生了什么变化”)进行查询。表?”)或按作者(“Bob 在数据库中做了哪些更改?”)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 SQL Server 中创建审核触发器 的相关文章

  • 重建数据库中的所有索引

    我有一个非常大的 SQL Server 2008 R2 数据库 1 5TB 并将在同一个表中的列之间复制一些数据 我被告知该架构有大量索引 并且想知道是否有默认查询或脚本可以重建所有索引 是否也被建议同时更新统计数据 30 个表中的每一个都
  • 客户端应用程序立即对数据库中的更新做出反应的最佳方式是什么?

    对数据库中的数据更新做出立即反应的最佳方法是什么 我能立即想到的最简单的方法是一个线程 它检查数据库中某些数据的特定更改 并持续等待在某个预定义的时间长度内再次检查它 这个解决方案对我来说似乎是浪费和次优的 所以我想知道是否有更好的方法 我
  • 查询嵌套查询结果中两列的位置

    我正在编写这样的查询 select from myTable where X in select X from Y and XX in select X from Y X 列和 XX 列的值必须位于同一查询的结果中 select X fro
  • SQL Server默认字符编码

    默认情况下 Microsoft SQL Server 中数据库的字符编码集是什么 如何查看 SQL Server 中当前的字符编码 编码 In most cases SQL Server stores Unicode data i e th
  • 如何在审计触发器中使用system_user但仍使用连接池?

    我想做以下两件事 在我的数据库表上使用审计触发器来识别哪个用户更新了什么 使用连接池来提高性能 对于 1 我在数据库触发器中使用 system user 来识别进行更改的用户 但这阻止我执行需要通用连接字符串的 2 有没有一种方法可以让我充
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • 如果存在多个相同的 ID,则使用 where 子句

    我有下表 ID source Name Age 1 SQL John 18 2 SAP Mike 21 2 SQL Mike 20 3 SAP Jill 25 我希望每个ID都有一条记录 这背后的想法是 如果 ID 仅出现一次 无论来源如何
  • SQL Server 每年的第一个星期一

    如何使用 T SQL 查找 一年中的第一个星期一 这是 ngruson 发布的链接中的示例 http sqlbump blogspot nl 2010 01 first monday of year html http sqlbump bl
  • 如何授予 SQL Server 代理访问权限以便能够写入/修改系统文件?

    我的工作有一个存储过程 运行 BCP 来查询一些数据 如果我单独运行 QUERYOUT 命令 它就会起作用 但是 如果我尝试在作业中运行它 它会创建文件但 挂起 并且数据永远不会放入文件中 这会永远挂起 所以我通常终止 BCP exe 我的
  • 从完整路径解析文件名和路径

    我需要使用 SQL 查询从完整路径解析文件名和文件路径 例如 完整路径 SERVER D EXPORTFILES EXPORT001 csv FileName Path EXPORT001 csv SERVER D EXPORTFILES
  • 将逗号分隔的主数据替换为列中的描述

    有 2 个 SQL Server 表 Products Name Status Code Product 1 1001 1003 Product 2 1001 1005 1006 Status Code Description 1001 S
  • 单个查询删除并显示重复记录

    采访中提出的问题之一是 一张表有100条记录 其中 50 个 是重复的 是否可以用单个 查询删除重复记录 从表中以及选择和 显示剩余 50 条记录 这可以在单个 SQL 查询中实现吗 Thanks SNA 对于 SQL Server 你会使
  • 从头开始构建 OLAP 解决方案时应该注意什么?

    我在一家运行基于 MS SQL 数据库服务器的软件产品的公司工作 多年来我已经用 PHP 开发了 20 30 个相当高级的报告 直接从数据库获取数据 这非常成功 人们对此感到高兴 但它有一些缺点 对于新的变化 它可能是相当开发密集型的 用户
  • 从一张表更新并插入另一张表

    我有两张桌子 table1 ID 代码 姓名 table2 ID 代码 姓名 具有相同的列 我想将数据从 table1 插入到 table2 或更新列 如果 table2 中存在 table1 ID table2 ID 执行此操作的简单方法
  • 在 SQL Management Studio 2012 中调试

    我正在使用 Management Studio 2012 但无法调试任何 SQL 代码 在我点击 调试 按钮后 左侧没有看到任何绿色箭头 并且我的 SQL 对象都没有加载到内存中 当我将光标移到我设置的断点上时 我收到此消息 The bre
  • INTEGER 到 DATETIME 的转换与 VB6 不同

    我正在查看一些遗留的 VB6 代码 比我的时代早很多年 它对 SQL 2005 数据库运行查询 它提供了日期限制WHERE子句 其中日期作为整数值给出CLng VB6 中的日期 e g WHERE SomeDateField gt 4006
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj
  • 内连接中的排序依据

    我将内部连接放入查询中 我得到了结果 但不知道数据如何输入输出 任何人都可以告诉我内部连接如何匹配数据 下面我显示了一个图像 有两张桌子 一张或两张桌子 根据我的说法 第一行应该是 Mohit 但输出不同 请告诉我 In SQL 输出的顺序
  • 如何设计一个存储非常大数据的表?

    我需要在Oracle中设计一个表 每天将存储2 5TB的数据 它可以增长到 200TB 超过 200TB 时记录将被清除 将其保留在 OLTP 中是一个可行的选择 还是需要将其转移到数据仓库 DB 请建议我在设计该表或数据库的架构时应牢记的
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro

随机推荐

  • Java:如何将字符串分割为多个字符?

    我试图在网上搜索来解决这个问题 但我没有找到任何东西 我编写了以下抽象代码来解释我的要求 String text how are you String textArray text splitByNumber 4 this method i
  • 如何重写子类中的方法?

    我编写了一个库存程序 其中包含一个数组和一个方法来计算输入的所有库存项目的总成本 我现在必须包含一个子类来覆盖原来的子类以包含 一个独特的功能 我创建了一个名为 ItemDetails 的新文件来设置原始 Item 的子类 我需要在这个子类
  • OAuth Twitter 和黑莓

    我在黑莓上有一个 j2me 项目 需要连接到 twitter 我已经完成了大部分困难的工作 我有一个 api 可以轻松引导我访问访问令牌 现在我似乎无法让身份验证与 REST 中的状态更新一起使用 我知道我的令牌是有效的 因为如果我运行验证
  • 如何更改表格视图单元格的高度

    我正在尝试读取一些 RSS 数据 我有不同大小的数据 数据存在于 Tabke 视图数据对象中 我使用标签添加数据并调整数据大小 没有成功 请帮忙 UITableViewCell tableView UITableView tableView
  • 可以制作灰度BMP文件吗?

    我正在尝试制作一个将 8 位灰度图像输出到 bmp 文件的程序 我发现8位BMP文件是有索引的 是否可以省略颜色表 只在颜色表中放入值而不是索引 或者BMP格式不允许这样 您仍然需要 LUT 但创建它非常简单 它只有 256 个条目 其中红
  • 这个递归正则表达式究竟是如何工作的?

    这是后续这个问题 看看这个模式 o 1 o It matches any sequence of o with a length of 2n with n 1 It works see regex101 com word boundarie
  • Python在内存中解压gzip数据,无需文件

    我已经从 HTTP 回复中压缩了数据 我有以下代码 def gzipDecode self content import StringIO import gzip outFilePath test compressedFile String
  • 如何隐藏或折叠 VSC 中的所有 javascript console.log 行

    大量的日志记录对我来说非常有帮助 然而 有时我想通过隐藏 折叠或降低字体的不透明度来暂时减少在 VSC 中编辑的代码的混乱程度 console log console warn and console errorjavascript Vue
  • PHP 重定向强制刷新 (CTRL+F5)

    我有一个带有可编辑表格的页面 我需要用户能够编辑它 然后提交他们的更改 一切正常 直到我将它们重定向到包含新内容 与其更改相关 的同一页面 然而 他们看到的是旧内容 如果我在浏览器上按 ctrl f5 它们的内容就会更新 我想知道是否有办法
  • C# 语法:----- IEnumerable people = new List();

    我理解前两句话 然而 对于第三个说法 我无法弄清楚这是什么类型的人 IEnumerable 人 还是列表 人 我认为幕后有一个转换 有人能解释一下陈述3中使用了什么技术吗 IEnumerable Person people new IEnu
  • 谷歌玩游戏成就重置(每天)

    上周我们软启动了我们的游戏 我们开始收到人们的错误 他们 所有人 似乎都存在的错误之一是 他们的成就至少每天都会被重置 但有时甚至在重新启动游戏时也会重置 成就在解锁时确实会弹出窗口 甚至在成就 UI 中可见 但它们不断被重置 删除 我们确
  • 从 Plone 内容类型生成 PDF

    我需要从内容类型创建 PDF 如果重要的话 可以灵活地制作 以便用户创建一个新文档 并在填写表单后生成 PDF 并准备下载 因此 基本上在创建 修改文档后 应该创建一个 PDF 并将其存储在 ZODB 中 实际上我使用的是 blob 以便我
  • 忽略 内的元素以不在点击时导航

    我正在尝试开始删除 btn 它位于 div 内 该 div 包含在react router dom 标记中 我希望能够在单击该 div 时导航到已建立的路径 但如果目标是删除 btn 那么它不应该导航 而只是在删除 btn 内执行 onCl
  • 如何在 Vim(或其他地方)中使用正则表达式搜索十六进制转储?

    我正在寻找一种方法来搜索二进制文件的十六进制转储中一系列十六进制数字的文本表示形式 如下所示 0x000001A0 36 5B 09 76 99 31 55 09 78 99 34 51 49 BF E0 03 0x000001B0 28
  • 绘制多重比较图?

    当一个人希望比较 测试 多个组时 例如 在进行方差分析时 就会面临多重比较的问题 如果我们想绘制比较图 同样适用 我的问题是 您知道哪些工具 在 R 中 可以进行反映多重比较的绘图 目前 我只知道两个 尽管我确信还有更多 TukeyHSD
  • 在 C 中将 char 指针类型转换为 float [重复]

    这个问题在这里已经有答案了 我有一个包含 ff 数据的平面文件 date quantity price item 我想使用以下结构创建数据记录 typedef struct char date item int quantity float
  • 使用 Python 的旧推文 Tweepy

    我正在尝试使用 Python 中的 tweepy 获取较旧的推文数据 大约 2 个月前 我尝试了自始至终的参数 但没有成功 有没有人在 tweepy 或其他 API 中找到解决办法 for id tweet in enumerate twe
  • 如何将布尔值插入数据库

    我必须将用户数据添加到名为 employees 的数据库表中 它有 ID 姓名 姓氏 用户名 密码 电子邮件 地址 管理员权限选项 Administator rigts 是布尔选项 是或否 当我制作一个包含所有数据的表单时 我想通过复选框检
  • 为什么Python无法从PIL导入图像?

    我尝试运行的单行如下 from PIL import Image 无论这看起来多么简单 它都会给出一个错误 Traceback most recent call last File C 2014 10 22 12 49 py line 1
  • 在 SQL Server 中创建审核触发器

    我需要对 SQL Server 2005 数据库中的两个表实施更改跟踪 我需要审核添加 删除 更新 详细说明更新内容 我本来打算使用trigger这样做 但似乎很容易错误地做到这一点 任何人都可以发布一个更新触发器的示例 以优雅的方式成功地