保护数据库和服务器

已完成

数据库身份验证和授权是保护开源数据库的传统方式。 在 Azure 中托管该数据库使你能够增强该保护。

作为 Adventureworks 的数据库开发人员,你希望提升公司 Azure Database for PostgreSQL 的保护。

本单元中,你将看到将本地 PostgreSQL 数据库迁移到 Azure 后有哪些其他保护。

保护数据

PostgreSQL 和 MySQL 拥有自己的身份验证和授权机制,它们控制允许哪些用户访问数据库,以及他们对这些数据库中的项目拥有哪些特权。 你应像迁移之前那样继续管理用户和特权。 请记住,可以使用 pgAdmin 和 MySQL Workbench 等管理工具来连接到 Azure 托管的服务器。

但是,Azure 为服务器提供了其他保护。 这种保护在三个级别运行:

  1. 它控制对服务器的访问,筛选来自未知或不受信任的源的流量。
  2. 它保护流量,确保流量在客户端与服务器之间往返时不可操纵或截获。
  3. 它保护服务器本身免受常见的外部威胁。

以下部分更详细地讨论了每一项内容。

用防火墙规则筛选流量

Azure Database for MySQL/PostgreSQL 在 Microsoft 管理的防火墙内运行。 默认情况下,任何东西都不能通过此防火墙。 添加防火墙规则以启用来自指定的 IP 地址块的流量,如前面的模块中所述。 建议主动查看允许定期发送流量的 IP 地址,并删除不再需要的客户端 IP 地址。

如果正在运行需要使用数据库的其他 Azure 服务,则必须为这些服务打开防火墙。 在 Azure 门户中 Azure Database for MySQL/PostgreSQL 服务的“连接安全性”页上,选择“允许访问 Azure 服务”操作设置将其打开。

Image highlighting the Allow access to Azure services action setting in the firewall configuration for Azure Database for MySQL or PostgreSQL

注意

对防火墙进行的任何更改可能需要长达五分钟的时间才能生效。

在某些情况下,为所有 Azure 服务开启服务器可能太过了。 如果正在运行 Azure Database for MySQL/PostgreSQL 的常规用途版本或内存优化版本,则使用 Azure 虚拟网络规则在虚拟网络级别筛选流量。 利用虚拟网络规则,你可以允许来自你自己的虚拟网络的流量访问服务器。 将阻止来自其他网络的流量。

Image showing the virtual network rules for Azure Database for MySQL or PostgreSQL

如果需要为防火墙维护任务编写脚本,请使用 Azure CLI。 下面的示例添加、删除和显示防火墙规则,使用针对 Azure Database for MySQL 执行操作的 az mysql 命令。 如果运行 PostgreSQL 命令,请改用相应的 az postgres 命令,参数是相同的:

允许访问 13.83.152.0 到 13.83.152.15 范围内的客户端

az mysql server firewall-rule create \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name] \
    --name FirewallRule1 \
    --start-ip-address 13.83.152.0 \
    --end-ip-address 13.83.152.15

列出所有防火墙规则

az mysql server firewall-rule list \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name]

显示 FirewallRule1 的详细信息

az mysql server firewall-rule show \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name] \
    --name FirewallRule1

删除 FirewallRule1。 此规则的地址范围中的客户端将被拒绝访问

az mysql server firewall-rule delete \
    --resource-group [resource group name] \
    --server-name [Azure Database for MySQL server name] \
    --name FirewallRule1

若要启用对 Azure 服务的访问,请使用 start-ip-addressend-ip-address(值为 0.0.0.0)创建防火墙规则。

使用 az msysql server vnet-rule 命令以类似方式创建和管理虚拟网络规则。

使用 SSL 保护流量

默认情况下为 Azure Database for MySQL/PostgreSQL 启用 SSL 保护。 可以使用 Azure 门户中 Azure Database for MySQL/PostgreSQL 服务的“连接安全性”页上的“强制实施 SSL 连接”设置来禁用和重新启用 SSL:

Image highlighting the Enforce SSL connection setting on the Connection security page for Azure Database for MySQL or PostgreSQL

使用 Azure 高级威胁防护来保护服务器

高级威胁防护是 Azure 提供的附加安全层。 高级威胁防护监视对服务器的访问,并查找异常模式或潜在恶意行为。 检测到此类行为时,会安排一个警报发送到指定的电子邮件地址。

检测到的异常活动模式包括:

  • 从意外或异常位置访问。
  • 从异常 Azure 数据中心访问。
  • 从可能有害的应用程序(如识别的攻击工具)访问。
  • 快速连续出现大量失败的登录,表明可能是暴力攻击。

可以从 Azure 门户中服务的“高级威胁防护”页启用高级威胁防护:

Image showing the Advanced Threat Protection page for Azure Database for MySQL or PostgreSQL

备份和还原数据库

Azure Database for MySQL/PostgreSQL 服务按照以下计划自动备份服务器:

  • 服务器创建后首个完整备份出现时立即每周进行一次完整备份。
  • 每天进行两次差异备份。
  • 每五分钟进行一次事务日志备份。

备份整个服务器。 不能备份单个数据库,也不能手动强制备份。

设置备份选项

可以使用这些备份来还原到已保留备份文件的任何时间点。 默认情况下,备份保留七天,但最多可保留 35 天。 还可以指定备份的存储方式:本地冗余备份保存在与服务器相同的区域,而异地冗余备份则复制到其他区域中的数据中心。 异地冗余选项仅适用于“常规用途”和“内存优化”定价层中服务器。 在 Azure 门户中服务器的“定价层”页设置备份选项:

Image showing the backup configuration section of the pricing tiers page for Azure Database for MySQL or PostgreSQL

还原服务器

Azure Database for MySQL/PostgreSQL 支持两种类型的服务器还原操作 - 时间点和异地还原。 在这两种情况下,还原操作都将创建新服务器。 原始服务器仍然可用。 如果希望应用程序使用已还原的数据,则必须将其重新配置为使用新服务器。 此外,必须记得打开新服务器的防火墙,以允许客户端和服务进行连接。

重要

无法还原已删除的服务器。 删除服务器时,还将删除与之关联的备份。

时间点还原

时间点还原使用原始服务器的备份创建新的服务器,并将服务器向前滚动到指定时间。 在 Azure 门户中服务器的“概述”页上使用工具栏中的“还原”命令来启动还原操作。 系统将提示输入新服务器的名称和时间点。

Image showing the point-in-time restore page for Azure Database for MySQL or PostgreSQL

如果希望通过命令行执行还原操作,Azure CLI 还支持 az mysql/postgres server restore 命令。 例如:

az mysql server restore \
    --resource-group [resource group name] \
    --name [new Azure Database for MySQL server name] \
    --source-server [original Azure Database for MySQL server name] \
    --restore-point-in-time "2019-10-23T02:10:00+08:00"

异地还原

异地还原是服务器的完整还原,它使用保留在异地冗余存储中的备份。 使用 Azure 门户创建新服务器时,请指定异地冗余备份作为数据源。 创建新服务器时,将使用此备份中的数据库填充它。

Image showing the server details section when creating an Azure Database for MySQL or PostgreSQL server

Azure CLI 提供 az mysql/postgres server georestore 命令,可通过命令行执行异地还原。

可能需要长达一小时才能将异地冗余备份复制到另一个区域。 如果需要从其他区域进行异地还原,这可能导致丢失多达一小时的数据。