SQL Azure:保護 SQL Azure 安全性
對於裝載解決方案來說,雖然所用的工具和策略大異其趣,但是安全性同樣極為重要。
Joshua Hoffman
雲端運算最近已經成為 IT 基礎結構本質不可或缺的一環。雖然內部部署運算仍然扮演著重要的角色,但是因為裝載解決方案具有靈活的組織必備的彈性、延展性以及成本效益等特性,因此也逐漸展露頭角。這一點在資料管理方面尤其明顯。
SQL Azure 就是這類雲端平台的絕佳範例。SQL Azure 是一種用於儲存、管理和分析資料的基礎結構,既熟悉、功能又強大,還兼具雲端運算的優點。共用、裝載的基礎結構有助於降低直接與間接成本,而付費使用模式則可提高效率,另外高可用性和容錯功能則已經是內建功能。
僅管雲端運算有許多優點,但是將資料移轉到 SQL Azure 等雲端解決方案,將一改您著手處理安全性等 IT 管理概念的方式。雖然安全性模型不見得一樣,但是為了確保資料安全性,仍需考慮包括存取控制、驗證和加密方法在內的許多因素。
SQL Azure 入門
即使您是第一次接觸 SQL Azure 也無需擔心,因為開始著手很簡單。如果您又很熟悉 SQL Server Management Studio 等傳統 SQL Server 管理工具 (從 SQL Server 2008 R2 版開始,也可以用它管理 SQL Azure 執行個體),更是不在話下。
第一步是瀏覽 Microsoft 線上服務客戶入口網站,為 Windows Azure 平台設定一個帳戶,如此您就有權存取包括 Windows Azure、SQL Azure 和 Windows Azure AppFabric 在內的 Windows Azure 服務 (這也提供開發人員跨越組織和網路界線連接應用程式和服務的管道)。
設立好帳戶之後,就可以瀏覽 sql.azure.com,存取 SQL Azure 控制台。接著再按一下 [新資料庫伺服器],為 SQL Azure 建立一個執行個體。
網路存取控制
為了保護您的資料,除非獲得特定電腦的存取授權,否則 SQL Azure 防火牆一律不准任何人存取您的資料庫。SQL Azure 防火牆的存取是以原始的 IP 位址為主。您可以透過 Windows Azure 平台管理入口網站 (請參閱 [圖 1]),或者直接在 Master 資料庫中使用預存程序進行管理。
設定 SQL Azure 防火牆規則的步驟如下:
- 登入 Windows Azure 平台管理入口網站。
- 從左窗格按一下 [資料庫]。
- 從左窗格展開您的訂閱,然後按一下您要設定防火牆規則的 SQL Azure 伺服器。
- 按一下 [防火牆規則],列出規則。
- 按一下 [新增],建立新的防火牆規則。如果要允許其他 Windows 服務存取這部 SQL Azure 伺服器,請選 [允許其他 Windows Azure 服務存取這部伺服器 (Allow other Windows Azure services to access this server)]。它會建立一個 IP 範圍介於「0.0.0.0 – 0.0.0.0」的規則。您可以使用同樣的程序來更新和刪除規則。
注意: 每一個防火牆規則都必須具備唯一的名稱 (不區分大小寫)。
[圖 1] 在 SQL Azure 設定防火牆規則。
有關透過 SQL 預存程序設定防火牆規則的詳細資訊,請參閱利用 T-SQL 變更防火牆規則。
您可以透過 TCP 連接埠 1433 使用 SQL Azure 服務。不過根據現有的防火牆原則而定,您可能需要設定用戶端電腦,才能透過該連接埠對外存取。有關本程序的詳細資訊,請參閱設定用戶端防火牆。
SQL 驗證
SQL Azure 中的驗證方法,是以傳統的 SQL Server 驗證為基礎。它不支援 Windows 驗證 (整合式安全性),因此每次連接 SQL Azure 時,都必須提供認證。
當您在 SQL Azure 內建立新的資料庫伺服器時,就會獲得升級而能夠建立伺服器層級主體的登入帳戶和密碼。這個帳戶相當於 SQL Server 系統管理員帳戶。您可以透過 Database Manager for SQL Azure 或 SQL Server Management Studio 2008 R2,使用 T-SQL 建立其他登入帳戶。
您可以透過 Master 資料庫使用 CREATE LOGIN 命令來建立和刪除登入帳戶。比方說,使用 Database Manager for SQL Azure 或 SQL Server Management Studio 連接到 Master 資料庫,然後執行以下查詢:
--create a login named "testlogin"
CREATE LOGIN testlogin WITH password='Passw0rd!';
您可以使用 [圖 2] 所示的命令,查詢現有的登入帳戶。
[圖 2] 使用 Database Manager for SQL Azure 查詢 SQL Server 登入帳戶。
建立登入帳戶之後,您就可以建立與那些登入帳戶相關聯的資料庫層級使用者,然後將特定的資料庫層級權限指派給每一位使用者。若要為特定的資料庫建立使用者,請連接適當的資料庫,然後執行以下命令:
CREATE USER testuser FROM LOGIN testlogin;
接著再使用以下命令指派權限:
EXEC sp_addrolemember 'db_datareader', 'testuser';
如需完整的角色清單,請參閱資料庫層級角色。請注意,當您執行 CREATE/ALTER/DROP LOGIN 陳述式或 CREATE/ALTER/DROP USER 陳述式時 (採用 FOR/FROM LOGIN 選項),這兩個陳述式都必須各自是 T-SQL 批次中唯一的陳述式,否則就會發生錯誤。
連線加密
SQL Azure 是利用表格式資料流 (TDS),透過 SSL 連線來傳送資料。SQL Azure 不支援未加密的連線,而且它具備一個由憑證授權單位發出的簽署憑證。這些因素都可以協助您確保資料傳輸的安全,同時防止攔截式攻擊。
加密信號交換是在 TDS 通訊協定的 PRELOGIN 串流中進行。包括 SQL Server Management Studio 以及透過 ADO.NET 的應用程式在內,只要與 SQL Azure 通訊的用戶端,都需要加密信號交換。
若要對來自 SQL Server Management Studio 的連線進行加密,請執行下列步驟:
- 開啟 SQL Server Management Studio。
- 從物件總管按一下 [連接],再按一下 [Database Engine]。
- 從 [連線到伺服器] 按一下 [連線內容]。
- 選取 [加密連接] (請參閱 [圖 3])。
[圖 3] 在 SQL Server Management Studio 對通往 SQL Azure 的連線進行加密。
若要以 ADO.NET 應用程式碼驗證憑證,請在資料庫連接字串中設定 Encrypt=True 和 TrustServerCertificate=False。
資料加密
SQL Azure 目前不支援 SQL Server 支援的標準資料加密機制。這些機制包括透明資料加密、非對稱金鑰、對稱金鑰以及 ENCRYPTBYPASSPHRASE 和 DECRYPTBYPASSPHRASE、CREATE/ALTER/DROP DATABASE ENCRYPTION KEY 或 CREATE/ALTER/DROP MASTER KEY 等 Transact-SQL 功能。
使用 SQL Azure 時,必須在應用程式層級進行加密或解密。換句話說,在從 SQL Azure 傳送或擷取資料時,是由應用程式負責進行資料的加密和解密。
當您開始在雲端裝載特定的資料和應用程式時,必須對資料安全性有相當的認知。您仍須參與雲端安全性架構。安全性的需求始終都在 — 只有技術會隨著雲端運算平台改變。如需本主題的其他相關資源,請務必參閱 SQL Azure 安全性方針和限制一文。
只要遵循帳戶和連線管理的最佳作法,就可以確實實現將資料移轉到雲端的完整優勢,而無需犧牲重要商務資訊的安全性。
Joshua Hoffman 是 TechNet Magazine 的前任主編。他現在是一名獨立的作家和顧問,為客戶提供技術與觀眾導向市場行銷的建議。Hoffman 同時也擔任 ResearchAccess.com 的主編,這個網站旨在培養和豐富市調社群。他現居美國的紐約市。