[Windows Azure][IT鐵人賽系列] Day 26 - SQL Azure Security Management

SQL Azure的安全性可以分為兩個部份,一個是防火牆設定,另一個則是帳戶的管理與授權設定。

SQL Azure的安全性可以分為兩個部份,一個是防火牆設定,另一個則是帳戶的管理與授權設定。

SQL Azure的防火牆是內含在Gateway中的一個設定,每一台SQL Azure Server都可以擁有自己的防火牆設定,只要進入Management Portal的SQL Azure伺服器管理介面,就可以看到防火牆的設定規則。

image

如果要新增防火牆的規則,只要按下『加入』,即會出現一個設定的畫面:

image

設定畫面中預設會帶出目前本機的IP位址,基本上如果只要允許本機連線到SQL Azure,只要把本機的IP位址貼到開始和結束的欄位,並給定名稱後即可,如果防火牆沒有允許連線的話,在連線時會看到這個訊息:

image

而除了透過管理工具以外,我們還可以利用內建的stored procedure來做這件事,這兩個stored procedure都在master資料庫內,所以必須要用管理員帳戶連接到master資料庫才能做:

image

另一個安全機制就是帳戶與權限的機制了,依SQL Azure的設計,所有使用者帳戶(Logins)都存在master資料庫內,而管理帳戶的SQL指令CREATE LOGIN、ALTER LOGIN與DROP LOGIN都只能在master資料庫中執行,而且密碼和使用者名稱都有限制,SQL Azure Server 登入的密碼,必須要是符合高強度密碼的規則,亦即密碼字元中必須要符合下列規則,如果不符以下的規則,那麼SQL Azure Server會回傳『Password validation failed. The password does not meet Windows policy requirements because it is too short.』或類似於此的訊息。

1. 密碼不包含全部或部分的使用者帳戶名稱。帳戶名稱的一部分是定義為三個以上的連續英數字元,兩邊以空格 (例如空格鍵、Tab 鍵和 Return 鍵) 或下列任一字元分隔:逗號 (,)、句號 (.)、連字號 (-)、底線 (_) 或數字符號 (#) 分隔。

2. 密碼長度至少為八個字元。

3. 密碼包含下列四種字元的其中三種:

4. 拉丁文大寫字母 (A 到 Z)。

5. 拉丁文小寫字母 (a 到 z)。

6. 以10為基底的數字 (0 到 9)。

7. 非英數字元,例如:驚嘆號 (!)、錢幣符號 ($)、數字符號 (#) 或百分比符號 (%)。

SQL Azure亦不像本地的SQL Server般有十數個伺服器群組,它只有兩個伺服器級的群組:dbmanager與loginmanager,分別代表資料庫以及帳戶的權限,而SQL Azure和SQL Server在安全管理上的異同可參照下表。

image

在一開始建立好SQL Azure Server時,只有一個Server-level principal帳戶,您可以使用Transact-SQL的CREATE LOGIN指令新增新的資料庫登入,這點和SQL Server的登入帳戶是相同的,但SQL Azure Server只能建立以SQL驗證方式驗證的登入帳戶,建立登入的SQL指令很簡單:

CREATE LOGIN [login_name] WITH PASSWORD = '[password for this login]'

當帳戶建立完成後,只是一個普通的登入帳戶,若想要讓帳戶具有特別的功能(管理登入帳戶或建立資料庫)時,就必須要將帳戶加到特定的安全性群組中。最常見的情況是SQL Azure Server的管理員將資料庫管理權限交給專案團隊或是開發人員,由他們來決定登入的帳戶以及資料庫的設置等等。若想要將帳戶加入安全性群組,則首先必須要將它設為可存取master資料庫的使用者,亦即要先使用CREATE USER來加入登入帳戶。

CREATE USER [user_name] FROM LOGIN [login_name]

加入帳戶至master資料庫後,即可使用系統預存程序sp_addrolemember將它加入安全性群組中(移除則是用sp_droprolemember)。

--將使用者加入dbmanager群組:
EXEC sp_addrolemember 'dbmanager', '[db_user_name]'

--將使用者加入loginmanager群組:
EXEC sp_addrolemember 'loginmanager', '[db_user_name]'

若想要將登入帳戶設定給指定的資料庫,則請在建立好資料庫後,切換到該資料庫(不可使用USE指令),再使用CREATE USER來設定允許存取該資料庫的使用者(登入帳戶必須要先在master資料庫使用CREATE LOGIN建立好)即可。而針對資料庫層次的安全性,像是schema、permission等等,都與獨立安裝的SQL Server功能相同,可參考SQL Server線上書籍或是坊間的SQL Server管理書籍來學習這部份的管理指令。

Reference:

http://msdn.microsoft.com/en-us/library/ee336235.aspx

http://msdn.microsoft.com/en-us/library/ee621782.aspx