【问题标题】:Azure SQL Database trigger to insert audit info into Azure TableAzure SQL 数据库触发器将审核信息插入 Azure 表
【发布时间】:2014-01-02 23:25:57
【问题描述】:

我正在研究数据库审计解决方案,并正在考虑让 SQL Server 触发器处理更改并将它们插入到审计表中。由于这是一个 SQL Azure 数据库并且会相当大,我担心由于审计而导致数据库增长的成本。

为了减少审计所需的成本,我正在考虑将审计表(或多个表)存储在 Azure Tables 中,而不是 Azure SQL 数据库中。那么问题就变成了,如何让 SQL Server 触发器将更改的数据导入 Azure Tables?

我唯一能想到的是在 SQL 数据库中有一个(或多个)审计表,以便触发器可以在本地插入行,然后每隔 X 秒有一个 Worker Role 从中提取任何行并移动它们到 Azure 表并从 SQL 数据库表中删除,以免它变大。

有没有更好的方法来进行这种集成?我可以以某种方式将消息从触发器放入队列吗?

【问题讨论】:

    标签: sql-server azure triggers azure-sql-database azure-table-storage


    【解决方案1】:

    Azure SQL 数据库(以前称为 SQL Azure)不支持 CLR(因此没有 EXTERNAL NAME 触发器参数),因此您的触发器无法在 T-SQL 之外执行任何操作。如果您希望审计内容进入表,您可以采用您想出的方法(暂时写入 SQL 表,然后定期将内容移动到表)。您还可以采用其他方法(这可能是意见/主观的,在这里不赞成),但先讨论一下队列概念,因为您询问了队列,并说明了您可以使用 Azure 队列做什么:

    您可以使用 Azure 队列来指定要在 SQL 数据库中插入/更新的项目。然后,队列处理代码可以负责执行更新并写入 Azure 表。由于必须在处理后显式删除队列消息,因此如果在执行过程中出现故障(例如,您写入 SQL 但在写入表存储之前失败),您可以简单地重复队列消息处理。如果您没有在超时值之前将其删除,则该消息最终会再次显示以供再次阅读。只要您的操作是幂等的,您就可以使用这种模式。

    【讨论】:

      【解决方案2】:

      比使用辅助角色更便宜的解决方案是结合使用 Azure 计划任务(您可以在 Mobile Apps 内免费启用它们每 15 分钟运行一次)和 Azure Web Sites。基本上,它的工作方式是每 15 分钟运行一次这个计划的作业,这将对您在 Azure 网站中运行的某些代码进行 HTTP 调用。此代码将执行您为您的工作角色概述的相同工作。

      【讨论】:

        【解决方案3】:

        或者,使用 SQL Server System-Versioned 临时表自动处理将审计记录(即更改)写入相应的历史表。

        【讨论】:

          猜你喜欢
          • 2021-11-15
          • 1970-01-01
          • 2013-06-20
          • 2016-09-18
          • 2014-11-02
          • 2020-08-06
          • 2020-11-07
          • 1970-01-01
          • 2021-09-05
          相关资源
          最近更新 更多