练习 - 管理安全性

已完成

在网络、身份验证和数据保护级别对 Azure SQL 数据库进行保护后,最后一步是了解如何持续管理安全性。 管理安全性包括审核、监视和数据分类。

审核

审核可帮助保持遵从法规、了解数据库活动,以及深入了解可以指明潜在安全违规的偏差和异常。 在此活动中,你将在服务器级别设置审核,尽管它在数据库级别也可用。

作为 SQL Server 审核的替代方法,Azure SQL 数据库中提供 Azure SQL 审核。 它由 SQL Server 审核提供支持,并支持审核操作组和操作,就像 SQL Server 一样。 审核功能跟踪数据库和服务器事件,并将事件写入 Azure 存储中的审核日志、Log Analytics 或 Azure 事件中心。 如果指向某个 Azure Blob 存储帐户,则可以在 XEvents 文件中存储和分析结果。 使用 Log Analytics 时,可以解锁使用 Kusto 查询语言 (KQL) 查询日志以及利用 Log Analytics 审核仪表板的功能。

配置审核

在之前的部署 SQL 数据库练习中,你在服务器级别设置了审核,但它在数据库级别也可用。 在将来的练习中,你将了解如何访问以及利用发送到 Azure Blob 存储、KQL 和 Log Analytics 仪表板的文件。

请完成以下步骤以设置 Log Analytics 工作区:

  1. Azure 门户搜索栏中,输入“Log analytics”,然后从结果中选择“Log Analytics 工作区”。 此时会显示“Log Analytics 工作区”窗格。

  2. 选择“创建”。 此时会显示“创建 Log Analytics 工作区”菜单。

  3. 在“基本信息”选项卡上,为每个设置输入以下值。

    设置
    项目详细信息
    订阅 Concierge 订阅
    资源组 从下拉列表中,选择[沙盒资源组]
    实例详细信息
    名称 输入“azuresql-la”
    区域 从以下列表中选择离你最近的区域

    使用免费沙盒,可以在部分 Azure 全球区域中创建资源。 创建资源时,请从下面的列表中选择一个区域:

    • 美国西部 2
    • 美国中南部
    • 美国中部
    • 美国东部
    • 西欧
    • 东南亚
    • Japan East
    • Brazil South
    • Australia Southeast
    • 印度中部
  4. 选择“查看 + 创建”,等待输入验证完成,然后选择“创建”。 等待资源部署完成。

  5. 选择“转到资源”。 此时会显示 Log Analytics 工作区的“概述”窗格。

  6. 在 Azure 门户中,转到 AdventureWorks 数据库。

  7. 在菜单中,选择“安全性”下的“审核”。 查看选项。

    可以在服务器级别应用审核,它适用于 Azure SQL 数据库逻辑服务器中的所有数据库。 如果还在数据库级别应用审核(在本单元中将进行此操作),则两次审核将同时进行,一个审核并不会替代另一个审核。

  8. 选择“启用 Azure SQL 审核”滑动开关。

  9. 选中“存储”复选框,然后填写必填字段

    • 对于“订阅”,从下拉列表中选择“Concierge 订阅”。
    • 对于“存储帐户”,从下拉列表中选择以 sql 开头、后跟随机的字母和数字字符串的帐户。
    • 将“存储身份验证类型”保留为默认的“存储访问密钥”选项

    sql 存储帐户将用于收集 XEvent 日志文件,这些文件在名为“sqldbauditlogs”的容器中另存为 blob 文件集合。 在稍后的活动中,你将查看容器以了解日志文件与 Log Analytics 的不同之处。

    提示

    如果未显示任何存储帐户,请新建一个帐户。 你可能需要在几分钟后刷新页面,然后该帐户才会显示。

    如果要审核生产环境,请考虑为审核日志设置一个单独的存储帐户。

  10. 选择“高级属性”,展开该部分并设置以下配置项:

    • 对于“保留(天数)”,输入“7”
    • 对于“存储访问密钥”,选择“主要”。

    注意

    如果看不到“高级属性”,请从命令栏中选择“保存”,然后重复此页面的配置说明

  11. 选中“Log Analytics”复选框,然后填写必填字段

    • 对于“订阅”,请从下拉列表中选择“礼宾订阅”
    • 对于“Log Analytics”,选择之前在本练习中创建的 Log Analytics 工作区 (asuresql-la)。
  12. 选择“保存”。

    处理配置可能需要几分钟时间。

现在已为存储帐户和 Azure Log Analytics 工作区启用审核。 稍后,你将更深入地了解 Azure SQL 的审核功能。 你将了解如何分析审核日志,以查看在整个模块中所做的全部更改以及其他一些有趣的用例。

Azure SQL 数据库的账本

账本功能在数据库中提供防篡改、数据完整性加密证明功能。 此证明有助于简化审核过程。

账本有助于保护数据免受任何攻击者或高特权用户(包括数据库管理员 (DBA)、系统管理员和云管理员)的攻击。 与传统的账本一样,该功能将保留历史数据。 当账本表中的事务修改数据时,该事件将使用 Merkle 树数据结构以加密方式进行 SHA-256 哈希处理,该结构将创建表示事务中所有行的根哈希。 数据库处理的事务随后也会通过 Merkle 树数据结构一起进行 SHA-256 哈希处理。 结果是构成块的根哈希。 然后会通过该块的根哈希以及上一个块的根哈希(作为哈希函数的输入)对该块进行 SHA-256 哈希处理。 此哈希处理形成了区块链。 如果某个行在数据库中进行更新,则其以前的值将在历史记录表中得到维护和保护。 账本提供了一段时间内对数据库所做的所有更改的历史记录。

账本功能以两种形式被引入到表中:

  • 可更新的账本表,它支持你更新和删除表中的行
  • 仅追加账本表,它仅允许对表进行插入

“可更新账本表”和“仅追加账本表”都提供篡改证据和数字取证功能 。

练习使用 Azure SQL 数据库的账本

在创建 Azure SQL 数据库的练习中,我们添加了一个名为 myLedgerDatabase 的数据库,并创建了一个名为 Account.Balance 的表。 在本练习中,我们将插入数据、对数据进行更新,并查询历史记录表和账本视图,以查看正在进行的跟踪和表之间的关系。

  1. 打开 SSMS 并连接到你的 Azure SQL 数据库逻辑服务器。

  2. 右键单击 myLedgerDatabase 数据库,然后选择“新建查询”

  3. 插入姓名 Nick Jones,作为开户余额为 50 美元的新客户。

    INSERT INTO [Account].[Balance]
    VALUES (1, 'Jones', 'Nick', 50);
    
  4. 插入姓名 John SmithJoe SmithMary Michaels,作为开户余额分别为 500、30 和 200 美元的新客户。

    INSERT INTO [Account].[Balance]
    VALUES (2, 'Smith', 'John', 500),
    (3, 'Smith', 'Joe', 30),
    (4, 'Michaels', 'Mary', 200);
    
  5. 查看 [Account].[Balance] 可更新账本表,指定添加到该表的 GENERATED ALWAYS 列。 选择“执行”以运行查询

    SELECT [CustomerID]
       ,[LastName]
       ,[FirstName]
       ,[Balance]
       ,[ledger_start_transaction_id]
       ,[ledger_end_transaction_id]
       ,[ledger_start_sequence_number]
       ,[ledger_end_sequence_number]
     FROM [Account].[Balance];  
    

    在结果窗口中,你将首先看到 T-SQL 命令插入的值,以及用于数据世系的系统元数据。

    • ledger_start_transaction_id 列记下与插入数据的事务相关联的唯一事务 ID。 因为 JohnJoeMary 是使用同一事务插入的,因此它们共享相同的事务 ID。
    • ledger_start_sequence_number 列记下事务插入值的顺序。
  6. Nick 的余额从 50 更新为 100

    UPDATE [Account].[Balance] SET [Balance] = 100
    WHERE [CustomerID] = 1;
    
  7. 查看 [Account].[Balance] 账本视图以及交易账本系统视图,标识做出更改的用户。 选择“执行”以运行查询

     SELECT
     t.[commit_time] AS [CommitTime] 
     , t.[principal_name] AS [UserName]
     , l.[CustomerID]
     , l.[LastName]
     , l.[FirstName]
     , l.[Balance]
     , l.[ledger_operation_type_desc] AS Operation
     FROM [Account].[Balance_Ledger] l
     JOIN sys.database_ledger_transactions t
     ON t.transaction_id = l.ledger_transaction_id
     ORDER BY t.commit_time DESC;
    

    Nick 的帐户余额已在可更新账本表中成功更新为 100
    账本视图显示,更新账本表时,对包含 50 的原始行执行 DELETE 操作。 在对包含 100 的新行执行相应的 INSERT 操作后,余额显示了 Nick 的新余额。

监视

监视和管理安全性有两个方面:

  • Azure 级别
  • 数据库或服务器级别

在 Azure 中,可以应用活动日志和基于角色的访问控制审核等工具。

在 Azure SQL 数据库中,可以配置 Azure SQL 审核并应用动态管理视图、指标和警报来监视安全相关事件。 例如,可通过 sys.event_log 跟踪失败和成功的连接数以及防火墙阻止的连接数。

Microsoft 建议配置 Microsoft Defender for Cloud,其中包括设置高级威胁防护警报。 我们将在下一部分和练习中讨论这些安全元素。 最后,可使用 Microsoft Defender for Cloud 来监视、管理和接收有关 Azure 资产中的所有资源的建议。

数据发现和分类

数据发现和分类服务为 Azure SQL 数据库形成了一种新的信息保护范例。 该服务旨在保护数据,而不仅仅是保护数据库。 此范例包括:

  • 针对应分类的潜在敏感数据的发现和建议
  • 使用元数据属性将标签永久添加到列的能力
  • 审核和查询敏感数据访问的能力

Azure SQL 提供数据分类中的 SQL 信息保护策略和 Microsoft 信息保护策略,可以根据要求选择其中任意一类策略。

门户视图仅适用于 Azure SQL,但 SQL Server 通过 SQL Server Management Studio 中的向导支持类似功能。

有关详细信息,请参阅数据发现和分类

Microsoft Defender for Cloud

Microsoft Defender for Cloud 是高级 SQL 安全功能的统一包。 它提供用于启用和管理两个主要功能的一个常用位置:

  • 漏洞评估
  • 高级威胁防护

漏洞评估

在最高级别,SQL 漏洞评估是一项扫描服务,可提供对安全状态的可见性,并提供解决任何潜在问题的可操作步骤。 在配置定期扫描时,将启用该服务,每隔 7 天扫描一次数据库,并检查是否存在任何漏洞。 然后,可以选择将这些报表发送给管理员、订阅所有者或可能需要获得更改通知的其他任何人。 为了使此服务正常运行,必须指定一个存储帐户用于存储结果。

高级威胁防护

通过高级威胁防护,可以在发生异常活动时收到安全警报,从而检测出潜在威胁并做出响应。 高级威胁防护可应用高级监视和机器学习技术来检测是否发生以下任何威胁:

  • SQL 注入
  • SQL 注入漏洞
  • 数据外泄
  • 不安全操作
  • 暴力攻击尝试
  • 异常客户端登录

在接下来的两个练习中,你将深入了解 Microsoft Defender for Cloud 和 Azure SQL 通常启用和保护的功能及方案。

行级安全性

借助行级别安全性,可以使用组成员资格或执行上下文来控制对数据库表中行的访问权限。

行级别安全性 (RLS) 可帮助实现对数据行访问的限制。 例如,可以确保工作人员仅访问与其部门相关的数据行。 再例如,将客户的数据访问权限限制为,仅访问与其公司相关的数据。

访问限制逻辑位于数据库层中,而不是在另一个应用层中远离数据。 数据库系统会在每次尝试从任何层进行数据访问时应用访问限制。 这样就会通过减少安全系统的外围应用,使安全系统变得更加可靠和稳健。

RLS 支持两种类型的安全谓词。

  • 筛选器谓词会以静默方式筛选可用于读取操作(SELECT、UPDATE 和 DELETE)的行
  • 阻止谓词可显式阻止违反该谓词的写入操作(AFTER INSERT、AFTER UPDATE、BEFORE UPDATE、BEFORE DELETE)

知识检查

1.

以下哪些方法可用于监视 Azure SQL 数据库的安全相关事件?