本文將介紹 Windows Azure SQL Database 防火牆及設定方式。
當您在 Windows Azure 管理入口網站中建立 SQL Database 伺服器後,依照 Windows Azure 平台的架構,會在 SQL Database 伺服器前面有一道防火牆來保護資料庫的安全(如下圖),不論您使用 SQL Database 管理入口網站、SQL Data Sync 或自行撰寫程式碼來存取 SQL Database 伺服器,傳輸過程中除了會加密之外,還須能夠通過伺服器層級防火牆才能順利連接資料庫。
伺服器層級防火牆規則
SQL Database 防火牆分為伺服器層級與資料庫層級兩種,均採 Rule-Based 模式,只有在防火牆規則中的 IP 位址才能存取 SQL Database 伺服器或 SQL Database 伺服器上的系統或使用者資料庫,因此當您第一次從 Windows Azure 管理入口網站來連接 SQL Database 管理入口網站(網址:https://隨機編號.database.windows.net)時,Windows Azure 會很貼心的偵測到您的 IP 不存在防火牆規則中,詢問您要不要自動將您的 IP 加入您正要連線的 SQL Database 伺服器的伺服器層級防火牆規則,以下稱伺服器層級防火牆規則(如下圖)。
當您按下【YES】時您的 IP 就會自動被加入伺服器層級防火牆規則,並詢問您是否要立刻連接至 SQL Database 管理入口網站來管理您的 SQL Database。若要查看 Windows Azure 幫您建立的規則,您可以點選任一 SQL Database 伺服器。
接著在 SQL Database 伺服器頁面中點選【CONFIGURE】您就可以看到剛剛由 Windows Azure 管理入口網站幫您建立的伺服器層級防火牆規則,預設規則名稱為【ClientIPAddress_yyyy-MM-dd hh:mm:ss】(如下圖)。
若您想要在新增其他伺服器防火牆規則只要在文字方塊中輸入防火牆規則名稱及起訖的 IP 位址,最後按【SAVE】即可,其中防火牆規則名稱必須是唯一不可重複。
以 T-SQL 查詢伺服器層級防火牆規則
您也可以利用 T-SQL 方式來管理您的伺服器層級防火牆規則, sys.firewall_rules 系統檢視表可用來查看您的 SQL Database 伺服器有哪些伺服器層級防火牆規則,提醒您在使用前請先將作用中的資料庫切換至 master 系統資料庫。
--查詢伺服器防火牆規則 --先連接至 master 系統資料庫 select * from sys.firewall_rules
執行結果如下,其中第一列 start_ip_address 和 end_ip_address 均為 0.0.0.0 的伺服器層級防火牆規則,在 Windows Azure 管理入口網站中並不會顯示,必須透過 sys.firewall_rules 系統檢視才看的到,這是當您建立 SQL Database 伺服器時,預設會勾選【Allow Windows Azure services to access the server.】,代表允許其他 Windows Azure 服務存取 SQL Database 伺服器的伺服器層級防火牆規則。第二列則是當您嘗試管理 SQL Database 伺服器時,Windows Azure 管理入口網站幫您自動建立的火牆規則。
以 T-SQL 建立伺服器層級防火牆規則
您可以利用 sp_set_firewall_rule 系統預存程序來建立伺服器層級防火牆規則,其中引數 @name 為防火牆規則名稱,@start_ip_address 為起始 IP 位址, @end_ip_address 為結束 IP 位址,例如下列的 T-SQL 指令碼:
--建立伺服器防火牆規則 --先連接至 master 系統資料庫 exec sp_set_firewall_rule N'TestServerLevelRule','10.0.0.1','10.0.0.10'
以 T-SQL 刪除伺服器層級防火牆規則
若您想要刪除不必要的伺服器層級防火牆規則,可以利用 sp_delete_firewall_rule 系統預存程序來進行,其中 @name 引數為伺服器層級防火牆的規則名稱,例如下列的 T-SQL 指令碼:
--刪除伺服器防火牆 --先連接至 master 系統資料庫 exec sp_delete_firewall_rule N'TestServerLevelRule'
資料庫層級防火牆規則
Windows Azure 保護 SQL Database 的方式除了伺服器層級防火牆外,另實作了資料庫層級防火牆規則,若您允許了某個或某一區段 IP 位址可以通過 SQL Database 防火牆,那麼這些 IP 位址同樣可以連接 master 系統資料庫或使用者資料庫,若您希望某個 IP 位址只能存取某一系統或使用者資料庫,則可以透過建立資料庫層級防火牆規則來實現這個需求。由於目前 Windows Azure 管理入口網站中只提供建立伺服器層級防火牆規則,若要設定資料庫層級防火牆規則則必須以 T-SQL 等方式來進行。
以 T-SQL 查詢資料庫層級防火牆規則
您可以利用 sys.database_firewall_rules 系統檢視表來查詢資料庫層級防火牆規則,例如下列的指令碼:
--查詢資料庫防火牆規則 --連接至您要設定資料庫層級防火牆的系統或使用者資料庫 select * from sys.database_firewall_rules
以 T-SQL 新增資料庫層級防火牆規則
您可以利用 sp_set_database_firewall_rule 系統預存程序來建立資料庫層級防火牆規則,其中引數與建立伺服器層級防火牆規則相同,例如下列的指令碼:
--建立資料庫層級防火牆 --連接到您要設定的資料庫 exec sp_set_database_firewall_rule N'TestDBFWRule','192.168.1.1','192.168.1.1'
以 T-SQL 刪除資料庫層級防火牆規則
若有不需要的資料庫防火牆規則,您也可以利用 sp_delete_database_firewall_rule 來將之刪除,其中引數與刪除伺服器層級防火牆規則,例如下列的指令碼:
--刪除資料庫層級防火牆 --連接到您要設定的資料庫 exec sp_delete_database_firewall_rule N'TestDBFWRule'
【參考資料】
- Windows Azure SQL Database Firewall (en-US)
-How to: Configure the Server-Level Firewall Settings (Windows Azure SQL Database)
- 如何:設定資料庫層級防火牆設定 (Windows Azure SQL Database)
- Windows Azure SQL Database Firewall
- Overview of Security in Windows Azure SQL Database