SQL Azure 對於單一個使用者帳戶來說,其實就等同於一台 SQL Server 機器,管理人員或開發人員只要使用註冊 SQL Azure 時所得到的帳戶連線即可,當使用者在 SQL Azure 上登記建立 SQL Azure Server 時,SQL Azure 會建立一個 master 資料庫,並派給一個帳戶,這個帳戶稱為伺服器級主帳戶(Server-level principal),它其實就是平常 SQL Server 所使用的 sa 帳戶,具有最高等級的權限,在剛開始使用時只有它可以存取到 master 資料庫。
在 master 資料庫中,存有完整的 SQL Azure Server 設定,必要的系統預存程序以及動態管理檢視表(Dynamic Management Views, DMV)等等。
圖:SQL Azure Server 的 master 資料庫可使用的檢視表
在 SQL Azure 上要管理使用者的存取權限,多半都和 SQL Server 本機上管理差不多,只有下列幾點不同:
- SQL Azure Server 上的安全群組(Security Role)只有 loginmanager 以及 dbmanager,分別屬於管理登入帳戶以及資料庫。
- 所有針對帳戶的管理以及資料庫的建立,都必須要在 master 資料庫上執行才會有效,因此這也表示登入帳戶必須要能夠連到 master 資料庫。
下表為在 SQL Server 上管理以及在 SQL Azure Server 上管理的差異。
|
若想要管理 SQL Azure Server 的登入帳戶,則必須要先使用 sqlcmd.exe 或是 SSMS 連線到 SQL Azure Server 的 master 資料庫,若不知道要如何連接到 SQL Azure,請參考『SQL Azure:資料庫的雲端世代』一文。
NOTE
在 SQL Azure Server 中,USE 指令無法使用,這代表不可以直接用 USE master 來切換到 master 資料庫,只能夠重新建立連到 master 資料庫的連線才行。
連線成功後,可以使用 SELECT * FROM sys.sql_logins 來查詢目前登記的 SQL 登入帳戶,在一開始時,只有一個伺服器級主帳戶。
接著,可以利用下列指令建立一個新使用者:
[SQL]
CREATE LOGIN [login_name] WITH PASSWORD = '[password for this login]'
例如:
[SQL]
CREATE LOGIN test_login WITH PASSWORD = 'frejwj@fe0i0jksd'
然後使用 SELECT * FROM sys.sql_logins 去查詢,就可以看到新的帳戶了。
NOTE
SQL Azure Server 登入的密碼,必須符合高強度密碼的規則,亦即密碼字元中必須符合下列規則:
1. 密碼不包含全部或部分的使用者帳戶名稱。帳戶名稱的一部分是定義為三個以上的連續英數字元,
兩邊以空格 (例如空格鍵、Tab 鍵和 Return 鍵) 或下列任一字元分隔:逗號 (,)、句號 (.)、
連字號 (-)、底線 (_) 或數字符號 (#) 分隔。
2. 密碼長度至少為八個字元。
3. 密碼包含下列四種字元的其中三種:
4. 拉丁文大寫字母 (A 到 Z)。
5. 拉丁文小寫字母 (a 到 z)。
6. 以 10 為基底的數字 (0 到 9)。
7. 非英數字元,例如:驚嘆號 (!)、錢幣符號 ($)、數字符號 (#) 或百分比符號 (%)。 若不符合規則,
則 SQL Azure Server 會回傳這個訊息: Password validation failed. The password does not
meet Windows policy requirements because it is too short.
NOTE
SQL Azure Server 的登入名稱最長為 117 個字元,因為在登入時必須要用 name@server 的方式,而 server 會佔去 10 個字元,因此登入名稱只能用 117 個字元。
若要修改登入帳戶的密碼,則請使用 ALTER LOGIN 指令。
[SQL]
ALTER LOGIN [login_name] {ENABLE|DISABLE} {WITH PASSWORD = '[password for this login]'}
例如:
[SQL]
--修改 test_login 的密碼:
ALTER LOGIN test_login WITH PASSWORD = 'frejwj@jwtergv54gr'
--關閉 test_login 帳戶:
ALTER LOGIN test_login DISABLE
--開啟 test_login 帳戶:
ALTER LOGIN test_login ENABLE
若要刪除使用者帳戶,請使用 DROP LOGIN 指令:
[SQL]
DROP LOGIN [login_name]
當帳戶建立完成後,只是一個普通的登入帳戶,若想要讓帳戶具有特別的功能(管理登入帳戶或建立資料庫)時,就必須將帳戶加到特定的安全性群組中。最常見的情況是 SQL Azure Server 的管理員將資料庫管理權限交給專案團隊或是開發人員,由他們來決定登入的帳戶以及資料庫的設置等等。
若想要將帳戶加入安全性群組,則首先必須將它設為可存取 master 資料庫的使用者,亦即要先使用 CREATE USER 來加入登入帳戶。
[SQL]
CREATE USER [user_name] FROM LOGIN [login_name]
例如:
[SQL]
CREATE USER test_login FROM LOGIN test_login
加入帳戶至 master 資料庫後,即可使用系統預存程序 sp_addrolemember 將它加入安全性群組中。
[SQL]
--將使用者加入 dbmanager 群組:EXEC sp_addrolemember 'dbmanager', '[db_user_name]'
--將使用者加入 loginmanager 群組: EXEC sp_addrolemember 'loginmanager', '[db_user_name]'
若想要將登入自指定的安全性群組中移除時,可使用系統預存程序 sp_droprolemember 來處理。
[SQL]
--將使用者自 dbmanager 群組移除: EXEC sp_droprolemember 'dbmanager', '[db_user_name]'
--將使用者自 loginmanager 群組移除: EXEC sp_droprolemember 'loginmanager', '[db_user_name]'
若要在 SQL Azure Server 中建立資料庫,則登入帳戶必須要先連到 master 資料庫,亦即要先使用 CREATE USER 將登入帳戶加到 master 資料庫中的使用者以及授予 dbmanager 安全性群組權限,才能夠建立資料庫。
建立資料庫的指令為 CREATE DATABASE,這個指令必須要在 master上資料庫做,或者在 SQL Azure Server 的管理介面上也可以(請參考『SQL Azure:資料庫的雲端世代』一文)。
[SQL]
CREATE DATABASE [database_name] [(MAXSIZE=[1|10] GB)]
建立好資料庫後,請切換到該資料庫後,再使用 CREATE USER 來設定允許存取該資料庫的使用者(登入帳戶必須要先在 master 資料庫使用 CREATE LOGIN 建立好)即可。
NOTE
只要是針對資料庫或使用者的 CREATE / ALTER / DROP 指令,都必須是在該 SQL 批次中唯一的一條指令,不能使用複數的指令來做,因此像下列指令無法在 SQL Azure Server 中執行:
[SQL]
IF EXISTS (SELECT [name]
FROM [sys].[databases]
WHERE [name] = N'database_name')
DROP DATABASE [database_name];
go
針對資料庫層次的安全性,像是 schema、permission 等等,都與獨立安裝的 SQL Server 功能相同,可參考 SQL Server 線上書籍或是坊間的 SQL Server 管理書籍來學習這部份的管理指令。
接下來...
下一期筆者會介紹與存取 SQL Azure Server 資料庫,以及移轉現有資料庫到 SQL Azure Server 的議題。
SQL Azure: Managing Databases and Logins
SQL Azure: Guidelines and Limitations
本文摘錄自 Micorsoft MSDN Flash 2009年1月號