保护数据库和服务器
数据库身份验证和授权是保护开源数据库的传统方式。 在 Azure 中托管该数据库使你能够增强该保护。
作为 Adventureworks 的数据库开发人员,你希望提升公司 Azure Database for PostgreSQL 的保护。
本单元中,你将看到将本地 PostgreSQL 数据库迁移到 Azure 后有哪些其他保护。
保护数据
PostgreSQL 和 MySQL 拥有自己的身份验证和授权机制,它们控制允许哪些用户访问数据库,以及他们对这些数据库中的项目拥有哪些特权。 你应像迁移之前那样继续管理用户和特权。 请记住,可以使用 pgAdmin 和 MySQL Workbench 等管理工具来连接到 Azure 托管的服务器。
但是,Azure 为服务器提供了其他保护。 这种保护在三个级别运行:
- 它控制对服务器的访问,筛选来自未知或不受信任的源的流量。
- 它保护流量,确保流量在客户端与服务器之间往返时不可操纵或截获。
- 它保护服务器本身免受常见的外部威胁。
以下部分更详细地讨论了每一项内容。
用防火墙规则筛选流量
Azure Database for MySQL/PostgreSQL 在 Microsoft 管理的防火墙内运行。 默认情况下,任何东西都不能通过此防火墙。 添加防火墙规则以启用来自指定的 IP 地址块的流量,如前面的模块中所述。 建议主动查看允许定期发送流量的 IP 地址,并删除不再需要的客户端 IP 地址。
如果正在运行需要使用数据库的其他 Azure 服务,则必须为这些服务打开防火墙。 在 Azure 门户中 Azure Database for MySQL/PostgreSQL 服务的“连接安全性”页上,选择“允许访问 Azure 服务”操作设置将其打开。
注意
对防火墙进行的任何更改可能需要长达五分钟的时间才能生效。
在某些情况下,为所有 Azure 服务开启服务器可能太过了。 如果正在运行 Azure Database for MySQL/PostgreSQL 的常规用途版本或内存优化版本,则使用 Azure 虚拟网络规则在虚拟网络级别筛选流量。 利用虚拟网络规则,你可以允许来自你自己的虚拟网络的流量访问服务器。 将阻止来自其他网络的流量。
如果需要为防火墙维护任务编写脚本,请使用 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-address
和 end-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 高级威胁防护来保护服务器
高级威胁防护是 Azure 提供的附加安全层。 高级威胁防护监视对服务器的访问,并查找异常模式或潜在恶意行为。 检测到此类行为时,会安排一个警报发送到指定的电子邮件地址。
检测到的异常活动模式包括:
- 从意外或异常位置访问。
- 从异常 Azure 数据中心访问。
- 从可能有害的应用程序(如识别的攻击工具)访问。
- 快速连续出现大量失败的登录,表明可能是暴力攻击。
可以从 Azure 门户中服务的“高级威胁防护”页启用高级威胁防护:
备份和还原数据库
Azure Database for MySQL/PostgreSQL 服务按照以下计划自动备份服务器:
- 服务器创建后首个完整备份出现时立即每周进行一次完整备份。
- 每天进行两次差异备份。
- 每五分钟进行一次事务日志备份。
备份整个服务器。 不能备份单个数据库,也不能手动强制备份。
设置备份选项
可以使用这些备份来还原到已保留备份文件的任何时间点。 默认情况下,备份保留七天,但最多可保留 35 天。 还可以指定备份的存储方式:本地冗余备份保存在与服务器相同的区域,而异地冗余备份则复制到其他区域中的数据中心。 异地冗余选项仅适用于“常规用途”和“内存优化”定价层中服务器。 在 Azure 门户中服务器的“定价层”页设置备份选项:
还原服务器
Azure Database for MySQL/PostgreSQL 支持两种类型的服务器还原操作 - 时间点和异地还原。 在这两种情况下,还原操作都将创建新服务器。 原始服务器仍然可用。 如果希望应用程序使用已还原的数据,则必须将其重新配置为使用新服务器。 此外,必须记得打开新服务器的防火墙,以允许客户端和服务进行连接。
重要
无法还原已删除的服务器。 删除服务器时,还将删除与之关联的备份。
时间点还原
时间点还原使用原始服务器的备份创建新的服务器,并将服务器向前滚动到指定时间。 在 Azure 门户中服务器的“概述”页上使用工具栏中的“还原”命令来启动还原操作。 系统将提示输入新服务器的名称和时间点。
如果希望通过命令行执行还原操作,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 CLI 提供 az mysql/postgres server georestore
命令,可通过命令行执行异地还原。
可能需要长达一小时才能将异地冗余备份复制到另一个区域。 如果需要从其他区域进行异地还原,这可能导致丢失多达一小时的数据。