- SQL Server 2022 引入 Ledger 功能:满足金融、医疗保健和供应链等受监管和审计密集型行业对防篡改审计跟踪的日益增长需求,其中最显著的实现是只追加账本表,确保敏感数据一旦添加就不可变,提供更强的完整性和合规性保证。
- 只追加账本表的需求:在许多应用中,特别是在审计和合规环境中,某些数据一旦写入就不能更新或删除,如安全设施的卡钥匙访问系统日志。只追加账本表通过在数据库级别强制不可变性来解决此类用例,防止更新或删除,同时锁定所有事务的详细加密记录,基于与可更新账本表相同的区块链设计,使用加密哈希创建不可变且可验证的事务链。
创建只追加账本表的示例:
- 模式设计和表创建:创建
AccessControl架构和KeyCardEvents表,使用WITH (LEDGER = ON (APPEND_ONLY = ON))选项确保只能通过INSERT语句添加行,任何修改或删除现有行的尝试都会导致错误。 - 向表中插入数据:插入一个员工进入建筑物的钥匙卡访问事件,每个
INSERT操作都会生成一个与当前事务相关联的加密哈希并添加到账本链中,确保数据完整性。 - 在账本和生成的列中查询数据:可以查询表的内容以及系统生成的列,如
ledger_start_transaction_id和ledger_start_sequence_number,这些值是链接每个记录到相应账本链的加密机制的一部分,用于进一步审计。 - 从账本视图查看数据:SQL Server 为每个账本表创建一个账本视图,包含所有历史和加密元数据,可以通过查询此视图来详细分析审计跟踪,包括执行操作的用户。
- 模式设计和表创建:创建
- 尝试修改或删除数据:SQL Server 严格执行只追加行为,尝试更新或删除行的操作会失败并显示错误消息,如
Updates are not allowed on append-only ledger tables.和Deletes are not allowed on append-only ledger tables.,以确保数据的不可变性。 - 审计和篡改检测:为说明如何检测篡改,假设攻击者尝试直接在 SQL Server 控制之外修改数据文件,通过使用外部摘要验证账本的加密完整性,篡改会变得明显。摘要代表数据库的当前加密状态,可以存储在异地用于以后的验证,如
EXEC sys.sp_generate_database_ledger_digest;和EXEC sys.sp_verify_database_ledger @digest = N'{...digest JSON... }';,如果存在差异,SQL Server 会识别差异并标记被篡改的块或记录,可通过账本视图分析事务细节。 - 结论:只追加账本表是 SQL Ledger 的基本功能,为 SQL Server 带来了类似区块链的不可变性,适用于数据完整性和透明度至关重要的场景,如金融交易、访问控制日志或监管合规模型,通过强制不可变性和保留加密事务历史,SQL Server 保护关键数据,同时提供熟悉的 SQL 操作以方便使用,使企业能够在当今的合规驱动环境中自信地管理敏感数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。