保护数据库和服务器
数据库身份验证和授权是传统上保护开源数据库的方式。 在 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 服务 作设置”,使其 ON。
防火墙配置中的“允许访问 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-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:
的“连接安全”页上的“强制 SSL 连接”设置
使用 Azure 高级威胁防护保护服务器
高级威胁防护是 Azure 提供的附加安全层。 高级威胁防护监视对服务器的访问,并查找异常或潜在恶意行为的模式。 检测到此类行为时,可以安排将警报发送到指定的电子邮件地址。
检测到异常活动的模式包括:
- 从意外或异常位置进行访问。
- 从异常的 Azure 数据中心进行访问。
- 从可能有害的应用程序进行访问,例如已识别的攻击工具。
- 大量连续登录失败,表示可能遭到暴力攻击。
可以从 Azure 门户中服务 高级威胁防护 页启用高级威胁防护:
显示 Azure Database for MySQL 或 PostgreSQL图像
备份和还原服务器
Azure Database for MySQL 或 PostgreSQL 服务根据以下计划自动备份服务器:
- 创建服务器后,将每周执行完整备份,并发生第一次完整备份。
- 每天执行两次差异备份。
- 事务日志备份每 5 分钟执行一次。
备份整个服务器。 无法备份单个数据库,并且无法手动强制备份。
设置备份选项
使用这些备份还原到已保留备份文件的任何时间点。 默认情况下,备份保留 7 天,但最多可以保留 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 Database for MySQL 或 PostgreSQL 服务器时显示服务器详细信息部分的
Azure CLI 提供从命令行执行异地还原的 az mysql/postgres server georestore
命令。
将异地冗余备份复制到另一个区域可能需要长达一小时的时间。 如果需要从其他区域执行异地还原,这可能会导致最多 1 小时的数据丢失。