使用者:小朱/sandbox6

SQL Azure
File:SQLServerAzureLogo.png
開發者Microsoft
目前版本商業運轉 (General Availability)(2010年2月1日)
作業系統Microsoft Windows Azure
類型雲端儲存式關聯資料庫系統
許可協定Microsoft EULA
網站SQL Azure官方網站

SQL Azure (舊稱 SQL Server Data Services 或 SQL Services) 是由微軟SQL Server 2008為主,建構在Windows Azure雲端作業系統之上,執行雲端運算 (Cloud Computing)的關聯式資料庫服務 (Database as a Service),是一種雲端儲存(Cloud Storage)的實作,提供網路型的應用程式資料儲存的服務。

基礎架構

編輯
 
SQL Azure 服務架構
 
SQL Azure HA/Fabric 架構

SQL Azure的基底是SQL Server 2008,不過它是一個特殊設計的SQL Server 2008,並且以Windows Azure為基座平台,配合Windows Azure的特性,SQL Azure也是一種分散在許多實體基礎架構(Physical Infrastucture)與其內部許多虛擬伺服器(Virtual Servers)的一種雲端儲存服務,外部應用程式或服務可以不用在乎資料庫實際儲存在哪裡,就可以利用SQL Azure顯露的SQL Server Fabric殼層服務以接受外部連接,並且在內部使用連線繞送(connection routing)的方式,讓連線可以對應到正確的伺服器,而且資料庫是在雲端中由多個伺服器來提供服務,每一次連線所提供服務的伺服器可能會不同,因此也可以保證雲端儲存的高度可用性(High availability)。

SQL Azure 架構在資料中心可分為三個部份[1]

1. 服務提供層 (Service Layer):

服務提供層是 SQL Azure 顯露在使用者端前面的服務介面 (Facade 模式),負責接取所有向 SQL Azure 提交要求的 TDS over SSL 連線與指令,當連線進入 SQL Azure 時,SQL Azure Load Balancer 會分派連線到不同的 SQL Azure Gateway 中。SQL Azure Gateway係負責處理 TDS 連線,管理連接層安全性 (connection-level security) 以及解析指令是否有內含潛在威脅的指令,再交由連線管理員 (Connection Manager) 將連線分派到位於平台提供層內不同的 SQL Azure 資料庫伺服器中進行處理,SQL Azure Gateway 也會管理對 SQL Azure 的連線,以避免可能會封鎖住伺服器的連線 (例如過長的查詢或過長的資料庫交易等)。

2. 平台提供層 (Platform Layer):

平台提供層則是以 Windows Azure Computes 的虛擬機器叢集 (Cluster),每台虛擬機器都安裝有 SQL Server 2008 以及管理一定數量的資料庫,通常一份資料庫會分散到三至五台的 SQL Server VM 中,而每台 SQL Server VM 也安裝了 SQL Azure Fabric 中控軟體,並透過 SQL Azure Fabric 與 SQL Azure Gateway 的管控下,所有對單一資料庫的連線都不一定會持續連入同一台 SQL Server VM 中。SQL Server VM 內也安裝了 SQL Azure Management Service,它會負責對每個資料庫間的資料複寫工作,以保障 SQL Azure 的基本高可用性要求。每台 SQL Server VM 內的 SQL Azure Fabric 和 Management Service 都會彼此交換健康與監控資訊等,以保持整體服務的健康與可監控性。

3. 基礎建設層 (Infrastructure Layer):

基礎建設層由 Windows Azure Computes 以及其高度可擴充性的運算與網路基礎架構來組成,以支援 SQL Azure 所需的高可用性以及高擴充性等雲端特色。

供應模型

編輯

SQL Azure 服務對外的供應模型 (Provisioning Model) [2]的設計以平緩企業進入雲端的學習曲線為主要考量,因此 SQL Azure 對外提供的是一台邏輯伺服器 (Logical Server),此伺服器是由 SQL Azure Gateway 所顯露,每一個 Windows Azure 的帳戶都可以建立一台 SQL Azure Server,就像在本地的 SQL Server 執行個體一樣,但這個執行個體是在雲端上執行且具有高可用性等特徵的資料庫伺服器。

每台 SQL Azure Server 都具有下列內容:

  1. DNS 名稱,使用者端應用程式要使用這個 DNS 名稱連入資料庫,格式為 [serverid].database.windows.net。
  2. master 資料庫,此資料庫會存放登入資訊 (logins),伺服器角色以及管理伺服器所必要的動態管理檢視表 (Dynamic Management View)。
  3. SQL Azure 防火牆,用來管理連入 SQL Azure Server 的連線來源。
  4. 使用者資料庫,每個資料庫都有不同的計費標準[3],大小由 1GB 到 50GB 不等。一台 SQL Azure Server 可以有多個使用者資料庫。

使用者端只要可以支援 TDS (Tabular Data Stream) over SSL,即可連線與存取 SQL Azure Server 的資料庫資源,這表示像ODBCADO.NETJDBC的 SQL Server 最新版驅動程式或SQL Native Client Library都可以連接到SQL Azure Server。

Transact-SQL的支援

編輯

作為SQL Server版本Transact-SQL的子集,不是所有的功能在SQL Azure上都有被支援,由於實體伺服器架構以及安全性的問題,許多分散式的查詢法以及常用的資料庫複製法都沒有辦法被SQL Azure支援,而在SQL Server 2005開始加入的SQL CLR能力也無法在SQL Azure上支援(因為它必須要掛載在SQL Azure實體伺服器上,但使用者端通常無法知道當下連到的伺服器是否為有安裝SQL CLR組件的那一台)。

受支援的Transact-SQL特性[4]

未受支援的Transact-SQL特性:

  • SQL CLR
  • 資料庫檔案組態。
  • 資料庫對映。
  • 分散式查詢。
  • 分散式交易。
  • 檔案群組管理。
  • 全域暫存表格。
  • 稀疏資料與索引。
  • SQL Server組態選項。
  • SQL Server Service Broker
  • 系統表格。
  • 追蹤旗標。

安全性

編輯

SQL Azure 的安全性有兩個部份,一個是管理傳輸層次安全性的防火牆,一個是管理存取控制的基本安全功能。

防火牆

編輯

每個 SQL Azure Server 都會有自己的防火牆 (Firewall) 設定,管理人員可以自由設定下列不同的使用者端來源模型:

  • 只允許雲端應用程式存取 SQL Azure Server,網段設為 0.0.0.0-0.0.0.0
  • 單一或多重網址 (address)。
  • 單一或多重網段 (segment)。

SQL Azure Server 的防火牆設定會儲存在 SQL Azure Gateway 中,作為管控使用者端連線之用。

基本安全功能

編輯

SQL Azure Server會有兩種安全群組[5]

  • 伺服器角色:有 dbmanager 以及 loginmanager 兩種。
    • dbmanager:賦與使用者可以建立資料庫(即CREATE DATABASE指令)的權利。
    • loginmanager:賦與使用者可以建立登入帳戶(即CREATE LOGIN指令)的權利。
  • 資料庫角色:與安裝在本機或伺服器上版本的SQL Server相同。

SQL Azure Server目前只支援使用SQL驗證(SQL Authentication)的安全驗證方式,以往的Windows驗證在SQL Azure上不支援。而在SQL Azure Server建立時,除了master資料庫以外,還會再多建立一個具有SQL Server的sa帳戶相等權力的帳戶,供使用者操作SQL Azure Server用,此帳戶稱為伺服器級主帳戶(server-level principal),基於資料庫的安全,管理人員必須要在 SQL Azure Server 中再建立一個或多個登入帳戶後,再授權給資料庫,使用者端應用程式不宜使用伺服器級主帳戶來存取 SQL Azure Server 與資料庫。

限制

編輯

SQL Azure 基於架構上的設計與天生的限制,SQL Azure Server的帳戶與安全控制會有下列限制[6]

  • 只有伺服器級主帳戶才具有變更密碼的能力, loginmanager 群組的成員帳戶不具變更密碼的權限,同時如果要存取master資料庫,則該使用者帳戶必須要被對應到master資料庫,同時伺服器級主帳戶是不可以變更或刪除的,同時只要是被設為伺服器級主帳戶的使用者,就算沒有給予 dbmanager loginmanager ,仍然可以建立資料庫並管理使用者。
  • 只要是登入伺服器,一律以master為預設資料庫,US-English為預設的登入語系。
  • 若要執行CREATE/ALTER/DROP LOGINCREATE/DROP DATABASE,必須要先連至master資料庫。
  • 當要在ADO.NET執行前述指令時,不可以使用參數化命令,而且前述命令於每個SQL批次也只能有一個(且是唯一的一個)。
  • 當要執行CREATE USER配合FOR/FROM LOGIN選項時,它也必須是SQL批次中唯一的一個。
  • 當要執行ALTER USER配合WITH LOGIN選項時,它也必須是SQL批次中唯一的一個。
  • 只有伺服器級主帳戶以及被賦與 dbmanager 角色的成員才有執行CREATE DATABASEDROP DATABASE的權力。
  • 只有伺服器級主帳戶以及被賦與 loginmanager 角色的成員才有執行CREATE LOGINALTER LOGINDROP DATABASE的權力。
  • 若想存取master資料庫,則該帳戶必須要對應到master資料庫。

工具與開發支援

編輯

開發人員或管理人員可使用 SQL Server 2008 R2 版本的 SQL Server Management Studio 連接 SQL Azure Server;Visual Studio 2010 的伺服器管理員也可以連接到 SQL Azure Server 並管理資料庫與資料結構。SQL Server 2008 (非R2) 則可透過輸入連線字串的方式連接 SQL Azure Server,或是使用命令列工具 sqlcmd.exe 連到 SQL Azure Server。在 SQL Azure 管理介面中可獲得連線字串的範例。

SQL Azure Server 可接受 TDS over SSL 的通訊與指令,因此開發人員可利用 ADO, ADO.NET, Entity Framework, LINQ to SQL 或其他可產生 TDS over SSL 的使用者端函式庫 (ex: SQL Native Client, JDBC, SQL Server Driver for PHP 等) 來存取 SQL Azure Server 與資料庫。

其他服務

編輯


SQL Azure OData Services

編輯

這是在 SQL Azure 開發初期時提供的 REST API 群,在 SQL Azure 團隊決定使用 TDS 協定開放 SQL Azure 資料庫後即暫停開發,在 SQL Azure 服務正式發布後,這個 REST API 群即恢復開發,此 REST API 可符合 OData 協定規格,目前已納入 SQL Azure Labs (http://www.sqlazurelabs.com) 環境中供開發人員測試。

SQL Azure Web Administrator

編輯

這是以 Silverlight 所開發,針對 SQL Azure 資料庫所設計的線上管理工具,代號為 Houston,目前是在 CTP 1 的階段,目前已納入 SQL Azure Labs 環境中供開發人員測試。

參考資料

編輯
  1. ^ SQL Azure Architecture
  2. ^ SQL Azure Provisioning Model
  3. ^ SQL Azure Pricing Information
  4. ^ Overview of Transact-SQL
  5. ^ Managing Logins and Users in SQL Azure
  6. ^ Guidelines and Limitations

外部連結

編輯

SQL Azure MSDN Online Documentation
SQL Server Data Services Official Site