Azure SQL 审计日志的 RowKey 模式

RowKey pattern of Azure SQL Audit logs

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

问题是可用过滤只能应用于 PartitionKey 和 RowKey(不是我需要的 Timestamp)。 PartitionKey 包含服务器和数据库名称,因此没有帮助。但是,RowKeys 是有特定顺序的,它似乎与时间戳有关(星号后的第二部分是 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 范围的方法吗?

Can you see a way to get proper RowKey range from date range?

关系是:DateTime.MaxValue-TimeStamp=Rowkey

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

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

屏幕截图:

和TimeStamp差不多。或者您可以使用此 link 检查将滴答声转换为日期时间的结果。

The problem is that usable filtering can be applied only on PartitionKey and RowKey (not Timestamp, which is what I need).

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

AFAIK,您还可以使用时间戳来过滤 table 存储。更详细的过滤方法,可以参考这个case.