教程:保护单一数据库或入池数据库

Azure SQL 数据库允许你通过以下方式确保单一数据库或入池数据库中数据的安全:

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

只需几个简单的步骤,即可增强数据库安全。 本教程介绍如何执行下列操作:

  • 创建服务器级和数据库级防火墙规则
  • 配置 Azure Active Directory (AD) 管理员
  • 通过 SQL 身份验证、Azure AD 身份验证和安全的连接字符串管理用户访问
  • 启用安全功能,例如高级数据安全、审核和数据掩码

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

先决条件

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

如果没有 Azure 订阅,可在开始前创建一个 1 元人民币试用帐户

登录到 Azure 门户

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

创建防火墙规则

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

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

Note

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

设置 SQL 数据库服务器防火墙规则

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

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

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

    服务器防火墙规则

    Note

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

  2. 在“概览”页上,选择“设置服务器防火墙”。 此时会打开数据库服务器的“防火墙设置”页。

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

      设置服务器防火墙规则

    2. 选择“确定”,关闭“防火墙设置”页。

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

Important

默认情况下,已在“允许访问 Azure 服务”下为所有 Azure 服务启用通过 SQL 数据库防火墙进行访问的功能。 选择“关闭”即可禁止访问所有 Azure 服务。

设置数据库防火墙规则

数据库级防火墙规则仅适用于单个数据库。 这些规则可以移植,在服务器故障转移过程中会随数据库一起迁移。 数据库级防火墙规则只能使用 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. 在工具栏上选择“执行”,创建防火墙规则。

Note

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

创建 Azure AD 管理员

确保使用相应的 Azure Active Directory (AD) 托管域。 若要选择 AD 域,请在 Azure 门户的右上角操作。 此过程确认是否对 Azure AD 和托管 Azure SQL 数据库或数据仓库的 SQL Server 使用了同一订阅。

选择-AD

若要设置 Azure AD 管理员,请执行以下操作:

  1. 在 Azure 门户的“SQL Server”页上,选择“Active Directory 管理员”。接下来选择“设置管理员”。

    选择 active directory

    Important

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

  2. 在“添加管理员”页上搜索并选择 AD 用户或组,然后选择“选择”。 将会列出 Active Directory 的所有成员和组,灰显的条目不能用作 Azure AD 管理员。 请参阅 Azure AD 功能和限制

    选择管理员

    Important

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

  3. 在“Active Directory 管理员”页顶部,选择“保存”。

    更改管理员的过程可能需要几分钟时间。 新管理员会出现在“Active Directory 管理员”框中。

Note

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

若要了解如何配置 Azure AD,请参阅:

管理数据库访问

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

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

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

  • Azure AD 身份验证,使用 Azure AD 托管的标识

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;
    

Note

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

Azure AD 身份验证

Azure Active Directory 身份验证要求将数据库用户作为包含的用户来创建。 包含的数据库用户映射到与数据库关联的 Azure AD 目录中的标识,且在 master 数据库中没有登录名。 Azure AD 标识可以用于单个用户,也可以用于一个组。 有关详细信息,请参阅包含的数据库用户 - 使你的数据库可移植,并查看 Azure AD 教程,了解如何使用 Azure AD 进行身份验证。

Note

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

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

Important

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

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

  1. 使用至少带 ALTER ANY USER 权限的 Azure AD 帐户连接到 Azure SQL Server。

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

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

    CREATE USER <Azure_AD_principal_name> FROM EXTERNAL PROVIDER;
    

Note

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

安全的连接字符串

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

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

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

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

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

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

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

    ADO.NET 连接字符串

启用安全功能

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

高级数据安全

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

Note

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

若要启用高级数据安全,请执行以下操作:

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

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

  3. 在“SQL Server”页上找到“安全性”部分,然后选择“高级数据安全”。

    1. 在“高级数据安全”下选择“打开”,以便启用此功能。 选择用于保存漏洞评估结果的存储帐户。 再选择“保存”。

      导航窗格

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

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

    威胁状态

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

威胁检测电子邮件

审核

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

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

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

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

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

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

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

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

        Tip

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

    3. 选择“其他安全性验证” 。

      审核设置

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

    审核记录

Important

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

动态数据屏蔽

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

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

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

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

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

    掩码设置

  4. 选择“其他安全性验证” 。 现在会对所选信息进行掩码处理以维护隐私。

    掩码示例

后续步骤

本教程介绍了如何通过简单的几个步骤增强数据库的安全性。 你已了解如何:

  • 创建服务器级和数据库级防火墙规则
  • 配置 Azure Active Directory (AD) 管理员
  • 通过 SQL 身份验证、Azure AD 身份验证和安全的连接字符串管理用户访问
  • 启用安全功能,例如高级数据安全、审核和数据掩码

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