练习 - 数据分类、动态数据掩码和 SQL 审核

已完成

在本练习中,你将结合从模块中学到的知识来演练一个方案。 你将学习如何添加新的数据分类和动态数据掩码,然后你将了解用于审核尝试查看标记进行数据分类的列的用户的各种方法。 本练习结合了你在有关管理安全性的模块中已学到的一些知识。

配置数据分类和掩码

  1. 在 Azure 门户中,转到 Azure SQL 数据库实例(而非逻辑服务器)。

    Azure 门户

  2. 在左侧窗格的“安全性”下,选择“数据发现和分类”

  3. 选择“分类”选项卡,然后选择“添加分类”。

    Screenshot of how to add a new classification.

    在上一练习中,已添加所有建议的列分类。 在此步骤中,你将手动向分类列的列表添加潜在敏感列。

  4. 在“SalesLT Customer”表中,数据发现和分类标识了要分类的 FirstNameLastName,但没有标识 MiddleName。 使用下拉列表立即添加 MiddleName,然后选择“添加分类”。

    Screenshot of how to add a name-related classification for MiddleName.

  5. 选择“保存”。

  6. 通过查看“概述”选项卡确认已成功添加分类,并确认 MiddleName 现已显示在 SalesLT 架构下的分类列列表中。

  7. 在左侧窗格中选择“概述”,返回到数据库概述。

    动态数据掩码 (DDM) 在 Azure SQL 和 SQL Server 中均可用。 DDM 通过在 SQL Server 级别(而不是在必须为这些类型的规则编写代码的应用程序级别)对非特权用户屏蔽敏感数据来限制数据泄露。 Azure SQL 将为你提供屏蔽项建议,你也可以手动添加掩码。

    在下一步中,你将屏蔽在上一步中查看的 FirstNameMiddleNameLastName 列。

  8. 在 Azure 门户中,转到 Azure SQL 数据库。 在左侧窗格的“安全性”下,选择“动态数据掩码”,然后选择“添加掩码”。

  9. 在下拉列表中,选择“SalesLT”架构、“Customer”表和“FirstName”列。 可以查看掩码选项,但默认选项即可满足此方案的要求。 选择“添加”以添加掩码规则。

    Screenshot of how to add First Name mask.

  10. 对表中的“MiddleName”和“LastName”重复前面的步骤。

    你现在具有三个掩码规则,如下所示:

    Screenshot of how to review all masking rules.

  11. 选择“保存”。

  12. 在左侧窗格中选择“概述”,返回到数据库概述。

检索已分类和屏蔽的数据

接下来,你将模拟查询分类列,并通过实际操作探索动态数据掩码。

  1. 转到 SQL Server Management Studio (SSMS)。

  2. 要在 AdventureWorks 数据库中创建新查询,请右键单击数据库,然后选择“新建查询”。

  3. 运行以下查询来返回分类数据(在某些情况下,标记进行屏蔽数据的列)。 选择“执行”以运行查询。

    SELECT TOP 10 FirstName, MiddleName, LastName
    FROM SalesLT.Customer;
    

    所得结果应显示前 10 个姓名,并且未应用任何掩码。 为什么? 因为你是此 Azure SQL 数据库逻辑服务器的管理员。

    Screenshot of SQL query results with no mask.

  4. 在以下查询中,你将创建一个新用户并以该用户的身份运行之前的查询。 你还将使用 EXECUTE AS 来模拟 Bob。 运行 EXECUTE AS 语句时,会话的执行上下文会切换到登录名或用户。 这意味着将根据登录名或用户(而不是执行 EXECUTE AS 命令的人员,在本例中为你自己)检查权限。 然后使用 REVERT 停止模拟登录名或用户。

    你可能认识后面命令的前几个部分,因为它们是上一练习的重复。 使用以下命令创建新查询,然后选择“执行”以运行查询并观察结果。

    -- Create a new SQL user and give them a password
    CREATE USER Bob WITH PASSWORD = 'c0mpl3xPassword!';
    
    -- Until you run the following two lines, Bob has no access to read or write data
    ALTER ROLE db_datareader ADD MEMBER Bob;
    ALTER ROLE db_datawriter ADD MEMBER Bob;
    
    -- Execute as our new, low-privilege user, Bob
    EXECUTE AS USER = 'Bob';
    SELECT TOP 10 FirstName, MiddleName, LastName
    FROM SalesLT.Customer;
    REVERT;
    

    结果现在应显示前 10 个姓名,并且未应用任何掩码。 没有授予 Bob 访问此数据的非掩码形式的权限。

    Screenshot of SQL query results with mask.

    如果出于某些原因,Bob 需要访问姓名并获取拥有此类访问权限的许可怎么办?

    可以通过转到“安全性”下的“动态数据掩码”窗格,在 Azure 门户中更新从屏蔽中排除的用户,但也可以使用 T-SQL 执行此操作。

  5. 右键单击 AdventureWorks 数据库并选择“新建查询”,然后输入以下查询以允许 Bob 在不屏蔽的情况下查询名称结果。 选择“执行”以运行查询。

    GRANT UNMASK TO Bob;  
    EXECUTE AS USER = 'Bob';
    SELECT TOP 10 FirstName, MiddleName, LastName
    FROM SalesLT.Customer;
    REVERT;  
    

    结果应包括全名。

    Screenshot of SQL query results with no mask.

  6. 你还可以删除用户的取消屏蔽特权,并通过在新查询中运行以下 T-SQL 命令来确认此操作:

    -- Remove unmasking privilege
    REVOKE UNMASK TO Bob;  
    
    -- Execute as Bob
    EXECUTE AS USER = 'Bob';
    SELECT TOP 10 FirstName, MiddleName, LastName
    FROM SalesLT.Customer;
    REVERT;  
    

    结果应包括已屏蔽的姓名。

    Screenshot of SQL query results with mask.

查看 SSMS 中的审核日志

作为管理员,你可能想要查看和审核访问数据库(尤其是分类数据)的用户。 接下来,你可以查看要发送到 Azure Blob 存储的审核文件。 如果日志跨越多个文件,则首先需要合并审核文件。 可通过执行以下操作,从 SSMS 完成此操作:

  1. 选择“文件”>“打开”>“合并审核文件”。

    Screenshot of how to open audit files.

  2. 选择添加

    Screenshot of how to add a new file.

  3. 选择“从 Azure Blob 存储添加”,然后选择“连接”。

    Screenshot of how to add from Azure Blob storage.

  4. 使用用于本模块的帐户登录 Azure。

    Screenshot of how to sign in to Azure.

  5. 选择配置用于存储审核日志的订阅、存储帐户和 blob 容器。 存储帐户应以 sql 开头。 容器将名为 sqldbauditlogs。 如果没有具有该名称的容器,请改用为审核创建的另一个存储帐户。

  6. 选择你的 Azure SQL 数据库逻辑服务器和 AdventureWorks 数据库。 确保“开始”时间早于你开始练习的时间。 选择“确定”。

  7. 可通过确认窗口了解要下载和合并的文件数量。 选择“确定”

  8. 查看文件,然后最后一次选择“确定”。

    此时会显示所有审核日志。 查找对 Bob 进行掩码测试的位置。 列表应该在底部附近。

  9. 选择语句,然后在详细信息窗格中查看信息。 例如,对于 Bob 尝试通过其查看分类数据的其中一个查询,在 data_sensitivity_information 字段下,可以看到分类的数据。

  10. 在“详细信息”窗格上双击 data_sensitivity_information 的值。 一个弹出窗口随即打开,你可在其中更轻松地读取数据。

    下面是可能会在 data_sensitivity_information 下看到的内容的示例:

    <sensitivity_attributes max_rank="20" max_rank_desc="Medium"><sensitivity_attribute label="Confidential - GDPR" label_id="bf91e08c-f4f0-478a-b016-23422b2a65ff" information_type="Name" information_type_id="57845286-7598-22f5-3422-15b24aeb125e" rank="20" rank_desc="Medium"/></sensitivity_attributes>
    

    然后可将此合并文件导出为 XEL 文件、CSV 文件或表,用于进行其他分析。 还可以使用 Azure PowerShell 查询扩展事件文件。

在 Azure 门户中查看审核日志

对审核日志的分析将取决于你的偏好。 在本部分中,你将了解如何使用 Log Analytics 在 Azure 门户中查询安全日志。

  1. 在 Azure 门户中,转到 AdventureWorks 数据库。 在左窗格的“安全性”下,选择“审核”,然后选择任务栏中的“查看审核日志”按钮。

    现在,你应该能够看到事件记录的查询、要在查询编辑器中运行的选项(通过门户运行 T-SQL 查询)、Log Analytics、视图仪表板的选项等等。

    Screenshot of how to view audit records.

    随意查看以了解其中一些选项。

  2. 选择“Log Analytics”。 可能需要选择“刷新”才能访问“Log Analytics”按钮。 如果显示“开始使用”屏幕,请选择“确定”。 系统随即将你转到查询编辑器,但它不是 T-SQL 编辑器。 在此视图中,你可以使用 Kusto 查询语言 (KQL) 查询日志,这旨在方便 SQL 专业人员使用和理解。

    默认查询是查询 SQLSecurityAuditEvents 类别。 尽管现在可能会使用此类别来查看安全相关事件,但此工具还可用于查询 Log Analytics 中的其他 Azure 日志和类别。 对于此步骤,你可以查找 Bob 尝试用于访问敏感信息的语句。 要获取在 SSMS 中看到的相同信息,请通过选择 > 按钮展开行详细信息。

    结果可能需要几分钟才能在此处显示。 可以通过再次选择“运行”来刷新查询。

    在此活动中,你不会深入探索日志的 KQL 查询,但如果以后想要进行更多练习,前面的参考中提供了很多资源。

    在下一步骤中,你将了解 SQL 安全如何基于 Log Analytics 生成仪表板,以便你可以监视和审核日志及其他 SQL 活动。 要返回“审核记录”窗格,请通过选择右上角的 X 关闭 Log Analytics 查询窗口。

  3. 选择“查看仪表板”

    Screenshot of the log analytics dashboard.

    概述仪表板随即显示。

  4. 选择“Azure SQL - 访问敏感数据”查看更多详细信息。

    可能需要等待 3-5 分钟,然后选择“刷新”,使项目在此处显示。

    你可以使用此详细信息来了解以下内容:

    • 访问敏感数据的查询数量。
    • 要访问的数据的类型和敏感度。
    • 访问敏感数据的主体。
    • 访问敏感数据的 IP。

    查看此处提供的功能,以及如何使用此工具审核使用情况。 你甚至可以选择每个按钮,在 Log Analytics 中查看相关日志。

  5. 完成后,通过选择右上角的 X 来关闭“Azure SQL - 访问敏感数据”窗格。

  6. 返回审核仪表板的概述窗格,选择“Azure SQL - 安全见解”。

    此仪表板显示更多审核信息,有助于你了解数据库活动和深入了解异常情况。 花几分钟时间查看并深入了解此处的选项。

除了查看 Azure SQL 服务的这些见解之外,在 Azure 中,还可以利用 Microsoft Defender for Cloud 来监视、管理和响应整个 Azure 资产中出现的问题。 若要查看 Azure SQL Defender for Cloud 之外的可用功能,可以在 Azure 门户中搜索和选择“Microsoft Defender for Cloud”。 访问可能受到限制,具体取决于订阅级别。