暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

保障SQL Server 2022安全:您知道Ledger这个功能吗?

原创 eternity 2022-08-17
1159

您可能听说或看到,从安全角度来看,SQL Server的下一个版本:SQL Server 2022具有一个名为Ledger的功能。

它已经在Azure中使用,但什么是账本?

在2点中,我会说:

  • 分类账有助于简化审计,为审计师提供数据完整性的加密证明。

  • 账本还可以保护数据免受任何攻击者或高权限用户(包括数据库或系统管理员)的攻击。

微软为我们提供了一个很好的模式来解释我是如何工作的:

微信图片_20220817091320.png

如果在表中进行了任何更改(删除、更新),则历史记录表中会出现先例值。

这就像一张临时表格,不是吗?

原则上是的,但其实不是,因为它也受到保护,而且更深入。

使用的技术是区块链。每个记录都将被加密,并具有前一个加密块和时间戳。

我在这个博客上,我只想解释一下它在没有加密端的情况下是如何工作的。

让我们开始我们的第一步…

我们可以使用LEDGER=ON选项直接创建数据库

例如:
微信图片_20220817091457.png

CREATE DATABASE [test_ledger]
ON  PRIMARY 
( NAME = N'test_ledger', FILENAME = N'D:\DATA\test_ledger.mdf' , SIZE = 8192KB , FILEGROWTH = 65536KB )
LOG ON 
( NAME = N'test_ledger_log', FILENAME = N'L:\LOG\test_ledger_log.ldf' , SIZE = 8192KB , FILEGROWTH = 65536KB )

With LEDGER = ON
GO

使用sys可以很容易地看到。数据库,如果使用列名is_ledger_on启用或不启用:

select name, is_ledger_on from sys.databases

我也尝试做一个alter数据库来禁用它,但它不起作用,我会说“还没有”…
微信图片_20220817091623.png

之后,我使用时态表的语法创建了一个表,并添加了分类账语法:

微信图片_20220817091738.png

CREATE TABLE [test_table_ledger]
(
               Id int not null primary key clustered,
               test1 varchar(10) NOT NULL,
               test2 varchar(10) NOT NULL
)
WITH
(
SYSTEM_VERSIONING  =  ON (HISTORY_TABLE = dbo.test_table_ledger_hist),
LEDGER =  ON
)

正如您在新的SSMS中所看到的,该表被标记为可更新的分类账,并且您有一个关联的历史表

微信图片_20220817091843.png

如果我看一下这两张表,它们是空的:

微信图片_20220817092037.png

我插入5个值,以便在表中有一些行:

微信图片_20220817092114.png

如果这些插入没有更改,则历史记录表在逻辑上为空。

现在,我将对第一行进行简单更新:

微信图片_20220817092149.png

如您所见,history表具有旧值,my表使用新值更新

Microsoft建议对历史表使用分类账视图,而不是直接使用历史表。

微信图片_20220817092232.png

3视图是可能的。第一个是sys。database_ledger_transactions,我将在本博客中只讨论这一个

此视图为我们提供了数据库事务的历史记录:

微信图片_20220817092312.png

没有很好的摘要可读,但如果我看一看,就会通过分类账创建一个新视图,名称为我的table+_Ledger。

在这种情况下,您可以很容易地看到操作类型

微信图片_20220817092347.png

将最后一个视图与sys组合。database_ledger_transactions,您可以跟踪操作。

在我的例子中,5次插入和1次更新(插入+删除)

微信图片_20220817092507.png

select dlt.commit_time, dlt.principal_name, test.id,test.test1, test.test2, test.ledger_operation_type_desc
from  test_table_ledger_Ledger test join sys.database_ledger_transactions dlt on test.ledger_transaction_id =  dlt.transaction_id

这个新特性的另一个有趣部分是将数据从普通表复制到分类账表的存储过程:sp_copy_data_in_batches

但这将是另一个故事…

希望能激起你的好奇心!

原文标题:SQL Server 2022 security: Do you know Ledger?
原文作者:Stéphane Haby
原文链接:https://www.dbi-services.com/blog/sql-server-2022-security-do-you-know-ledger/

最后修改时间:2022-08-18 16:34:50
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论