保护数据库和服务器

已完成

数据库身份验证和授权是保护开源数据库的传统方式。 在 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 服务 作设置”,使其 处于打开状态。

突出显示了 Azure Database for MySQL 或 PostgreSQL 防火墙配置中“允许访问 Azure 服务”功能设置的图像

注释

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

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

显示 Azure Database for MySQL 或 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:

突出显示 Azure Database for MySQL 或 PostgreSQL 的“连接安全”页上的“强制实施 SSL 连接”设置的图像

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

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

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

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

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

显示 Azure Database for MySQL 或 PostgreSQL 的高级威胁防护页的图像

备份和还原数据库

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

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

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

设置备份选项

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

图像显示 Azure Database for MySQL/PostgreSQL 的“定价层”页的备份配置部分

恢复服务器

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

重要

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

时间点还原

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

图像显示 Azure Database for MySQL/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 门户创建新服务器时,请指定异地冗余备份作为数据源。 创建新服务器时,将使用此备份中的数据库填充它。

显示创建 Azure Database for MySQL 或 PostgreSQL 服务器时服务器详细信息部分的图像

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

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