保護資料庫和伺服器
資料庫驗證和授權是保護開放原始碼資料庫的傳統方式。 在 Azure 中託管該資料庫,可讓您有機會提高防護。
身為 Adventureworks 的資料庫開發人員,您想要改善公司適用於 PostgreSQL 的 Azure 資料庫的保護。
在此單元中,您會看到,現在將您的內部部署 PostgreSQL 資料庫移轉至 Azure 後,可能會有哪些額外的保護。
保護您的資料
PostgreSQL 和 MySQL 有他們自己的驗證和授權機制,可控制哪些使用者可存取資料庫,以及對這些資料庫中的項目擁有的權限。 您應該使用與移轉之前相同的方式,繼續管理使用者和權限。 請記住,您可以使用管理工具 (例如 pgAdmin 和 MySQL Workbench) 連接到 Azure 託管的伺服器。
不過,Azure 會為您的伺服器提供額外的保護。 此保護會以三個層級運作:
- 它會控制伺服器的存取,篩選來自不明或不受信任來源的流量。
- 它可保護流量,確保從用戶端流向伺服器並再次返回時,無法操作或攔截。
- 它會保護伺服器本身免於遭受常見的外部威脅。
下列章節將詳細討論這些項目。
使用防火牆規則篩選流量
適用於 MySQL 或 PostgreSQL 的 Azure 資料庫會在 Microsoft 管理的防火牆內執行。 依預設,沒有任何東西可以通過此防火牆。 您可以新增防火牆規則,讓來自指定 IP 位址區塊的流量通過防火牆,如先前課程模組中所述。 建議您主動檢閱定期傳送流量的 IP 位址,並移除已不再需要的用戶端 IP 位址。
如果您正在執行其他需要使用資料庫的 Azure 服務,則必須為這些服務開啟防火牆。 在 Azure 入口網站中,針對適用於 MySQL 或 PostgreSQL 服務的 Azure 資料庫,在 [連線安全性] 頁面上,選取 [允許存取 Azure 服務] 動作設定,使其處於 [開啟] 狀態。
注意
您對防火牆所做的任何變更,最多可能需要五分鐘的時間才會變成作用中狀態。
在某些情況下,向所有 Azure 服務開啟伺服器可能超量。 如果您執行的適用於 MySQL 或 PostgreSQL 的 Azure 資料庫是一般用途或記憶體最佳化版本,即可使用 Azure 虛擬網路規則來篩選虛擬網路層級的流量。 虛擬網路規則可讓您允許源自於您自己的虛擬網路流量存取伺服器。 來自其他網路的流量將會遭到封鎖。
如果您需要編寫防火牆維護工作的指令碼,可以使用 Azure CLI。 以下範例 (新增、刪除和顯示防火牆規則) 使用 az mysql
命令,對適用於 MySQL 的 Azure 資料庫進行作業。 如果您正在執行 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
和 0.0.0.0
的 end-ip-address
值,來建立防火牆規則。
您可以利用類似的方式 (使用 az msysql server vnet-rule
命令) 來建立及管理虛擬網路規則。
使用 SSL 保護流量
預設會針對適用於 MySQL 或 PostgreSQL 的 Azure 資料庫啟用 SSL 保護。 您可以在 Azure 入口網站中,使用 [連線安全性] 頁面上的 [強制執行 SSL 連線] 設定,針對適用於 MySQL 或 PostgreSQL 服務的 Azure 資料庫停用並重新啟用 SSL:
使用 Azure 進階威脅防護保護伺服器
進階威脅防護是 Azure 提供的額外安全性層級。 進階威脅防護會監視您伺服器的存取,並尋找異常或潛在惡意行為的模式。 偵測到此類行為時,會安排向指定的電子郵件地址傳送警示。
偵測到的異常活動模式包括:
- 從未預期或異常位置存取。
- 從異常的 Azure 資料中心存取。
- 從可能有害的應用程式存取,例如可辨識的攻擊工具。
- 快速連續發生大量的失敗登入,表示可能存在密碼蠻力攻擊。
您可以從 Azure 入口網站中服務的 [進階威脅防護] 頁面啟用 [進階威脅防護]:
備份及還原伺服器
適用於 MySQL 或 PostgreSQL 服務的 Azure 資料庫會根據下列排程自動備份您的伺服器:
- 每週會進行完整備份,並在建立伺服器時立即執行第一次完整備份。
- 差異備份每天會執行兩次。
- 每隔五分鐘會執行一次交易記錄備份。
整個伺服器都會進行備份。 您無法備份個別的資料庫,也無法手動強制備份。
設定備份選項
您可以使用這些備份來還原到已保留備份檔案的任何時間點。 依預設,備份會保留七天,但您可以保留最多 35 天。 您也可以指定備份的儲存方式,本機備援備份保存在與伺服器相同的區域,而異地備援備份會複製到其他區域的資料中心。 異地備援備份選項僅適用於一般用途和記憶體最佳化定價層中的伺服器。 您可以在 Azure 入口網站的 [定價層] 頁面上,為您的伺服器設定備份選項:
還原伺服器
適用於 MySQL 或 PostgreSQL 的 Azure 資料庫支援兩種類型的伺服器還原作業,時間點和異地還原。 在這兩種情況下,還原動作會建立新的伺服器。 原始伺服器仍可使用。 如果您想要讓應用程式使用還原的資料,您必須將它們重新設定為使用新的伺服器。 此外,您必須記得開啟新伺服器的防火牆,以允許用戶端和服務連線。
重要
您無法還原已刪除的伺服器。 當您刪除伺服器時,也會刪除與其相關聯的備份。
還原時間點
時間點還原會使用原始伺服器的備份來建立新的伺服器,並將伺服器向前復原到指定的時間。 您可以使用 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
命令,可從命令列進行異地還原。
最多可能需要一小時的時間,才能將異地備援備份複寫到另一個區域。 如果您需要從不同區域進行異地還原,這可能會導致遺失最多一小時的資料。