教程:保护 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 数据库”页面上选择数据库 。

    Screenshot of the Azure portal page for a logical SQL database, highlighting the server name.

    注意

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

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

    Screenshot of the Azure portal Networking page for a logical SQL Server, showing the server-level IP firewall rule.

  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 和托管数据库或数据仓库的逻辑服务器使用了同一订阅。

Screenshot of the Azure portal showing the Directory + subscription filter page, where you would choose the directory.

若要设置 Microsoft Entra 管理员:

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

    Screenshot of the Azure portal Microsoft Entra ID page for a logical server.

    重要

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

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

    Screenshot of the Azure portal page to add a Microsoft Entra admin.

    重要

    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. 选择一个驱动程序选项卡,复制完整的连接字符串。

    Screenshot of the Azure portal showing the connection strings page. The ADO.NET tab is selected and the ADO.NET (SQL authentication) connection string is displayed.

启用安全功能

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”下选择“开”以启用此功能。 选择用于保存漏洞评估结果的存储帐户。 再选择“保存”。

      Screenshot of the Azure portal Navigation pane for threat detection settings.

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

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

    Screenshot of the Azure portal Threat status page showing pie charts for Data Discovery & Classification, Vulnerability Assessment, and Threat Detection.

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

Screenshot of a sample email from Azure, indicating a Potential Sql Injection Threat detection. A link in the body of the email to Azure SQL DB Audit Logs is highlighted.

审核

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

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

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

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

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

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

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

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

        提示

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

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

        注意

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

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

    3. 选择“保存”。

      Screenshot of the Azure portal Audit settings page. The Save button is highlighted. Audit log destination fields are highlighted.

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

    Screenshot of the Azure portal page showing Audit records for a SQL database.

重要

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

动态数据掩码

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

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

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

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

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

    Screenshot of the Azure portal page to Save or Add Dynamic Data Mask fields. Recommended fields to mask display schema, table, and columns of tables.

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

    Screenshot of SQL Server Management Studio (SSMS) showing a simple INSERT and SELECT statement. The SELECT statement displays masked data in the LastName column.

透明数据加密

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

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

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

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

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

    Screenshot of the Azure portal page to enable Transparent Data Encryption.

注意

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

注意

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

提示

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

下一步

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