Azure SQL审核日志的RowKey模式

时间:2018-04-10 13:18:41

标签: azure-sql-database azure-table-storage audit-logging

我已配置Azure SQL服务器以将审核日志存储在存储帐户中。它创建了一个名为SQLDBAuditLogsMYDBNAME的表。这很好,我也可以查看表格并查看日志。

问题是可用的过滤只能应用于PartitionKey和RowKey(而不是Timestamp,这是我需要的)。 PartitionKey包含服务器和数据库名称,因此没有任何帮助。但是,RowKeys按特定顺序排列,似乎与Timestamp有关(星号为GUID后的第二部分)。不幸的是,我无法找到如何根据DateTime猜测RowKey。

您可以在此处看到三个值对:

| Timestamp                | RowKey                                  |
| 2017-04-13T15:30:00.630Z | 2519102033993698531*7588f70d-0b4e-49... |
| 2017-04-13T16:15:00.615Z | 2519102006993841015*1667d291-bbef-40... |
| 2017-04-13T17:15:01.255Z | 2519101970987444854*6f4dca8f-e81a-4a... |

如您所见,数字按降序排列。

我尝试了很多种组合(例如,从long.MaxValue中减去数字,然后将其作为Ticks等等),但没有成功。

你能看到从日期范围获得正确的RowKey范围的方法吗?

1 个答案:

答案 0 :(得分:0)

  

你能看到从日期范围获得正确的RowKey范围的方法吗?

关系是:DateTime.MaxValue-TimeStamp=Rowkey

因为TimeStamp是一个除数,所以在TimeStamp中会忽略一些毫秒。因此,您可以使用DateTime.MaxValue-RowKey来实现模糊查询。 以下代码使用您提供的第一组数据。

var ticks = DateTime.MaxValue.Ticks - 2519102033993698531;
DateTime datetime = new DateTime(ticks);
Console.WriteLine(datetime.ToString());

屏幕截图:

enter image description here

与TimeStamp几乎相同。或者您可以使用此link来检查将ticks转换为datetime的结果。

  

问题是可用的过滤只能应用于PartitionKey和RowKey(而不是Timestamp,这是我需要的)。

但是,正如您所提到的,您认为只能使用PartitionKey和RowKey过滤表存储。

AFAIK,您还可以使用TimeStamp过滤表格存储空间。有关如何过滤的更多详细信息,请参阅此case