教程:保护 Azure SQL 数据库中的数据库

适用于:Azure SQL 数据库

本教程介绍如何执行下列操作:

  • 创建服务器级和数据库级防火墙规则
  • 配置 Microsoft Entra 管理员
  • 通过 SQL 身份验证、Microsoft Entra 身份验证和安全的连接字符串管理用户访问
  • 启用安全功能,例如 Microsoft Defender for SQL、审核、数据掩码和加密

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

Azure SQL 数据库支持通过以下方式保护数据:

  • 使用防火墙规则限制访问
  • 使用需要标识的身份验证机制
  • 将授权与基于角色的成员身份和权限配合使用
  • 启用安全功能

注意

可以根据 Azure SQL 托管实例连接体系结构中的说明,使用网络安全规则和专用终结点来确保 Azure SQL 托管实例的安全。

若要了解详细信息,请参阅 Azure SQL 数据库安全概述功能这两篇文章。

提示

这个免费学习模块演示如何在 Azure SQL 数据库中保护数据库

先决条件

若要完成本教程,请确保具备以下先决条件:

如果没有 Azure 订阅,请在开始前创建一个试用订阅

登录到 Azure 门户

若要完成本教程中的所有步骤,请登录到 Azure 门户

创建防火墙规则

SQL 数据库中的数据库受 Azure 中防火墙的保护。 默认情况下,将拒绝与服务器和数据库的所有连接。 若要了解详细信息,请参阅服务器级和数据库级防火墙规则

将“允许访问 Azure 服务”设置为“关闭”即可启用最安全的配置。 然后,为需要连接的资源(例如 Azure VM 或云服务)创建一个保留 IP(经典部署),仅允许该 IP 地址通过防火墙进行访问。 如果使用资源管理器部署模型,则每个资源都需要一个专用的公共 IP 地址。

注意

通过端口 1433 进行的 SQL 数据库通信。 如果尝试从企业网络内部进行连接,则该网络的防火墙可能不允许经端口 1433 的出站流量。 如果是这样,则无法连接到服务器,除非管理员打开端口 1433。

设置服务器级防火墙规则

服务器级 IP 防火墙规则适用于同一服务器中的所有数据库。

若要设置服务器级防火墙规则,请执行以下操作:

  1. 在 Azure 门户中,选择左侧菜单中的“SQL 数据库”,然后在“SQL 数据库”页面上选择数据库 。

    逻辑 SQL 数据库的 Azure 门户页屏幕截图,其中突出显示了服务器名称。

    注意

    确保复制完全限定的服务器名称(例如 yourserver.database.chinacloudapi.cn),以便稍后在本教程中使用。

  2. 在“设置”下选择“网络” 。 选择“公共访问”选项卡,然后选择“公用网络访问”下的“所选网络”以显示“防火墙规则”部分。

    逻辑 SQL Server 的 Azure 门户“网络”页的屏幕截图,其中显示了服务器级 IP 防火墙规则。

  3. 在工具栏上选择“添加客户端 IP”,将当前的 IP 地址添加到新的 IP 防火墙规则。 IP 防火墙规则可以针对单个 IP 地址或一系列 IP 地址打开端口 1433。

  4. 选择“确定”保存防火墙设置。

现可使用指定的 IP 地址或 IP 地址范围连接到服务器中的任何数据库。

设置数据库防火墙规则

数据库级防火墙规则仅适用于单个数据库。 数据库在服务器故障转移期间会保留这些规则。 数据库级防火墙规则只能使用 Transact-SQL (T-SQL) 语句进行配置,而且只能在配置了服务器级防火墙规则后进行配置。

若要设置数据库级防火墙规则:

  1. 例如,使用 SQL Server Management Studio 连接到数据库。

  2. 在“对象资源管理器”中,右键单击数据库,并选择“新建查询” 。

  3. 在查询窗口中添加此语句,将 IP 地址修改为公共 IP 地址:

    EXECUTE sp_set_database_firewall_rule N'Example DB Rule','0.0.0.4','0.0.0.4';
    
  4. 在工具栏上选择“执行”,创建防火墙规则。

注意

也可使用 sp_set_firewall_rule 命令在 SSMS 中创建服务器级防火墙规则,不过必须连接到 master 数据库。

创建 Microsoft Entra 管理员

确保使用相应的 Microsoft Entra ID(以前称为 Azure Active Directory)托管域。 若要选择你的域,请在 Azure 门户的右上角操作。 此过程确认是否对 Microsoft Entra ID 和托管数据库或数据仓库的逻辑服务器使用了同一订阅。

Azure 门户的屏幕截图,其中显示了可在其中选择目录的“目录 + 订阅筛选器”页。

若要设置 Microsoft Entra 管理员:

  1. 在 Azure 门户的“SQL Server”页面上,从资源菜单中选择“Microsoft Entra ID”,然后选择“设置管理员”以打开“Microsoft Entra ID”窗格。

    逻辑服务器的 Azure 门户 Microsoft Entra ID 页的屏幕截图。

    重要

    需要是“全局管理员”才能执行此任务。

  2. “Microsoft Entra ID”窗格中,搜索并选择 Microsoft Entra 用户或组,然后选择“选择”。 这将列出 Microsoft Entra 组织的所有成员和组,灰显条目不支持作为 Microsoft Entra 管理员

    用于添加 Microsoft Entra 管理员的 Azure 门户页的屏幕截图。

    重要

    Azure 基于角色的访问控制 (Azure RBAC) 仅适用于门户,不会传播到 SQL Server。

  3. “Microsoft Entra 管理员”页面顶部,选择“保存”

    更改管理员的过程可能需要几分钟时间。 新管理员将显示在“Microsoft Entra 管理员”字段中。

注意

设置 Microsoft Entra 管理员时,新的管理员名称(用户或组)不能作为登录名或用户存在于 master 数据库中。 如果存在,则设置会失败,并会回退所做的更改,指示该管理员名称已存在。 由于服务器登录名或用户不是 Microsoft Entra ID 的一部分,因此使用 Microsoft Entra 身份验证连接用户的任何操作都会失败。

有关配置 Microsoft Entra ID 的信息,请参阅:

管理数据库访问

管理数据库访问的方法是:将用户添加到数据库,或者允许用户使用安全的连接字符串进行访问。 连接字符串用于外部应用程序。 若要了解详细信息,请参阅管理登录名和用户帐户Microsoft Entra 身份验证

若要添加用户,请选择数据库身份验证类型:

  • SQL 身份验证,使用用户名和密码登录,仅适用于服务器中存在特定数据库的情况

  • Microsoft Entra 身份验证,使用由 Microsoft Entra ID 管理的标识

SQL 身份验证

若要通过 SQL 身份验证来添加用户,请执行以下操作:

  1. 例如,使用 SQL Server Management Studio 连接到数据库。

  2. 在“对象资源管理器”中,右键单击数据库,然后选择“新建查询”。

  3. 在查询窗口中输入以下命令:

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    
  4. 在工具栏上选择“执行”,以便创建用户。

  5. 默认情况下,用户可连接到数据库,但没有读取或写入数据的权限。 若要授予这些权限,请在新的查询窗口中执行以下命令:

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    

注意

在数据库级别创建非管理员帐户,除非这些帐户需要执行创建新用户之类的管理员任务。

Microsoft Entra 身份验证

由于Azure SQL 数据库不支持 Microsoft Entra 服务器主体(登录名),因此使用 Microsoft Entra 帐户创建的数据库用户将创建为包含的数据库用户。 即使存在同名的登录名,包含的数据库用户也不会与 master 数据库中的登录名相关联。 Microsoft Entra 标识可以是单独的用户,也可以是组。 有关详细信息,请参阅包含的数据库用户,使你的数据库可移植,并查看 Microsoft Entra 教程,了解如何使用 Microsoft Entra ID 进行身份验证。

注意

不能使用 Azure 门户创建数据库用户(管理员除外)。 Microsoft Entra 角色不会传播到 SQL Server、数据库或数据仓库。 它们只能用于管理 Azure 资源,不会应用于数据库权限。

例如,“SQL Server 参与者”角色不会授予连接到数据库或数据仓库的访问权限。 必须使用 T-SQL 语句在数据库中授予此权限。

重要

不支持在 T-SQL 的 CREATE LOGINCREATE USER 语句中将特殊字符(例如冒号 : 或与号 &)用作用户名的一部分。

若要添加具有 Microsoft Entra 身份验证的用户,请执行以下操作:

  1. 使用至少具有 ALTER ANY USER 权限的 Microsoft Entra 帐户连接到 Azure 中的服务器。

  2. 在“对象资源管理器”中,右键单击数据库,并选择“新建查询” 。

  3. 在查询窗口中输入以下命令,并将 <Azure_AD_principal_name> 修改为 Microsoft Entra 用户的主体名称,或者修改为 Microsoft Entra 组的显示名称:

    CREATE USER [<Azure_AD_principal_name>] FROM EXTERNAL PROVIDER;
    

注意

Microsoft Entra 用户在数据库元数据中标记为类型 E (EXTERNAL_USER),而组则标记为类型 X (EXTERNAL_GROUPS)。 有关详细信息,请参阅 sys.database_principals

安全的连接字符串

若要确保客户端应用程序与 SQL 数据库的连接安全且已加密,必须将连接字符串配置为:

  • 请求加密的连接
  • 不信任服务器证书

使用传输层安全性 (TLS) 建立连接,减少中间人攻击的风险。 连接字符串按数据库提供,并已预先配置为支持客户端驱动程序,例如 ADO.NET、JDBC、ODBC、PHP。 有关 TLS 和连接的信息,请参阅 TLS 注意事项

若要复制安全的连接字符串,请执行以下操作:

  1. 在 Azure 门户中,选择左侧菜单中的“SQL 数据库”,然后在“SQL 数据库”页面上选择数据库 。

  2. 在“概览”页上,选择“显示数据库连接字符串”。

  3. 选择一个驱动程序选项卡,复制完整的连接字符串。

    Azure 门户的屏幕截图,其中显示了连接字符串页。选择“ADO.NET”选项卡,此时将会显示 ADO.NET(SQL 身份验证)连接字符串。

启用安全功能

Azure SQL 数据库提供可以通过 Azure 门户访问的安全功能。 这些功能适用于数据库和服务器,数据掩码功能除外,该功能只能在数据库上使用。 若要了解详细信息,请参阅 Microsoft Defender for SQL审核动态数据掩码透明数据加密

Microsoft Defender for SQL

Microsoft Defender for SQL 功能可在潜在威胁出现时检测到它们,并提供有关异常活动的安全警报。 用户可使用审核功能探查这些可疑事件,确定事件背后的目的是否是要访问、破坏或利用数据库中的数据。 系统也会为用户提供安全概览,其中包括漏洞评估以及数据发现和分类工具。

注意

例如,SQL 注入就是一种威胁,攻击者会在应用程序输入中注入恶意 SQL。 应用程序随后就会在不知情的情况下执行恶意 SQL,允许攻击者访问,导致数据库中的数据被破坏或修改。

若要启用 Microsoft Defender for SQL,请执行以下操作:

  1. 在 Azure 门户中,选择左侧菜单中的“SQL 数据库”,然后在“SQL 数据库”页面上选择数据库 。

  2. 在“概览”页上,选择“服务器名称”链接 。 此时会打开服务器页。

  3. 在“SQL Server”页上找到“安全性”部分,然后选择“Defender for Cloud” 。

    1. 在“Microsoft Defender for SQL”下选择“开”以启用此功能。 选择用于保存漏洞评估结果的存储帐户。 再选择“保存”。

      用于威胁检测设置的 Azure 门户“导航”窗格的屏幕截图。

      也可配置电子邮件,以便接收安全警报、存储详细信息和威胁检测类型。

  4. 返回到数据库的“SQL 数据库”页,在“安全性”部分选择“Defender for Cloud” 。 在此处可以找到适用于数据库的各种安全指示器。

    Azure 门户“威胁状态”页的屏幕截图,其中显示了数据发现和分类、漏洞评估和威胁检测的饼图。

如果检测到异常活动,系统会向你发送有关该事件的电子邮件。 其中包含活动性质、数据库、服务器、事件时间、可能原因以及建议的操作,方便你调查并缓解潜在威胁。 如果收到此类电子邮件,请选择“Azure SQL 审核日志”链接,以便启动 Azure 门户并查看发生事件时的相关审核记录。

Azure 中示例电子邮件的屏幕截图,其中显示了潜在的 Sql 注入威胁检测。突出显示了电子邮件正文中指向 Azure SQL DB 审核日志的链接。

审核

此审核功能跟踪数据库事件并将事件写入 Azure 存储、Azure Monitor 日志或写入事件中心。 审核可确保一切符合法规、了解数据库活动,以及深入了解那些可能表明存在潜在安全违规的偏差和异常。

若要启用审核,请执行以下操作:

  1. 在 Azure 门户中,选择左侧菜单中的“SQL 数据库”,然后在“SQL 数据库”页面上选择数据库 。

  2. 在“安全性”部分,选择“审核” 。

  3. 在“审核”设置下,设置以下值:

    1. 将“审核”设置为“打开”。

    2. 选择下述任意项作为“审核日志目标”:

      • 存储,一个 Azure 存储帐户,可以在其中保存事件日志,并可将其作为 .xel 文件下载

        提示

        请对所有已审核的数据库使用同一存储帐户,以充分利用审核报告模板。

      • Log Analytics,可以自动存储事件,这些事件用于查询或者在将来用于分析

        注意

        需要使用 Log Analytics 工作区来支持高级功能,例如分析、自定义警报规则,以及 Excel 或 Power BI 导出。 在没有工作区的情况下,只能使用查询编辑器。

      • 事件中心,可以路由需要在其他应用程序中使用的事件

    3. 选择“保存”。

      Azure 门户“审核设置”页的屏幕截图。已突出显示“保存”按钮。突出显示了审核日志目标字段。

  4. 现在可以选择“查看审核日志”,以便查看数据库事件数据。

    Azure 门户页的屏幕截图,其中显示了 SQL 数据库的审核记录。

重要

请参阅 SQL 数据库审核,了解如何使用 PowerShell 或 REST API 来进一步自定义审核事件。

动态数据掩码

数据掩码功能会自动隐藏数据库中的敏感数据。

若要启用数据掩码功能,请执行以下操作:

  1. 在 Azure 门户中,选择左侧菜单中的“SQL 数据库”,然后在“SQL 数据库”页面上选择数据库 。

  2. 在“安全性”部分选择“动态数据掩码”。

  3. 在“动态数据掩码”设置下选择“添加掩码”,以便添加掩码规则。 Azure 会自动填充可供选择的数据库架构、表和列。

    用于保存或添加动态数据掩码字段的 Azure 门户页的屏幕截图。用于屏蔽表的显示架构、表和列的建议字段。

  4. 选择“保存”。 现在会对所选信息进行掩码处理以维护隐私。

    SQL Server Management Studio (SSMS) 的屏幕截图,其中显示了简单的 INSERT 和 SELECT 语句。SELECT 语句在 LastName 列中显示屏蔽的数据。

透明数据加密

加密功能会自动加密静态数据,无需对访问加密数据库的应用程序做任何更改。 新数据库会默认启用加密。 也可使用 SSMS 和 Always Encrypted 功能来加密数据。

若要启用或验证加密,请执行以下操作:

  1. 在 Azure 门户中,选择左侧菜单中的“SQL 数据库”,然后在“SQL 数据库”页面上选择数据库 。

  2. 在“安全性”部分,选择“透明数据加密”。

  3. 必要时,将“数据加密”设置为“打开”。 选择“保存”。

    Azure 门户页的屏幕截图,用于启用透明数据加密。

注意

若要查看加密状态,请使用 SSMS 连接到数据库,然后查询 sys.dm_database_encryption_keys 视图的 encryption_state 列。 状态为 3 指示数据库已加密。

注意

有些被视为客户内容的项(例如,表名、对象名称和索引名称)可能会在日志文件中传输,以供 Azure 提供支持和排查问题。

提示

准备好开始开发 .NET 应用程序了吗? 此免费 Learn 模块介绍如何开发和配置可查询 Azure SQL 数据库的 ASP.NET 应用程序,包括创建简单数据库。

下一步

请转到下一教程,了解如何进行地理分布。