Microsoft Azure SQL Database

File:SQLServerAzureLogo.png | |
開發者 | Microsoft |
---|---|
当前版本 | 社群預覽版本(CTP)(2009年7月(以SDK為主)) |
操作系统 | Microsoft Windows Azure |
类型 | 雲端儲存式關聯資料庫系統 |
许可协议 | Microsoft EULA |
网站 | SQL Azure官方網站 |
此條目包含计划中或預期會发布的软件。 |
SQL Azure (之前被稱為 SQL Server Data Services) 是由微軟SQL Server 2008為主,建構在Windows Azure雲端作業系統之上,執行雲端運算 (Cloud Computing)的關聯式資料庫服務,是一種雲端儲存(Cloud Storage)的實作,提供網路型的應用程式資料儲存的服務。
基礎架構

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.用戶端層(Client Layer):
SQL Azure顯露表格化資料流(Tabular Data Stream)的協定,供外界連線至SQL Azure伺服器服務,外部應用程式可以使用像ADO.NET、ODBC或是專供給PHP的驅動程式產生TDS,並透過SSL (TDS over SSL)傳送至SQL Azure,而對於輕量級或是Web 2.0級的應用程式(如AJAX、Silverlight),則可以先在Windows Azure中架設一個Service之後,利用該Service來存取SQL Azure,或是利用ADO.NET Data Services的方式,向外提供REST API以存取SQL Azure。
2.服務層(Service Layer,圖示中的Data Provisioning Layer):
服務層是提供用戶端應用程式與平台服務層之間的一個閘道(gateway),並且提供了資料發布(provisioning)、計費與計量(billing and metering)以及連線繞送(connection routing)。在此層中會使用指定的Azure服務平台帳戶來計算存取的流量等參數以作為計費標準,同時將命令繞送至實際存在資料的伺服器位置執行服務。
3.平台層(Platform Layer,圖示中的Data Service Layer):
平台層是實際提供資料服務的一群實體伺服器以及虛擬伺服器群,這些伺服器群擁有許多的SQL Server執行個體,並且由SQL Azure fabric中控管理。SQL Azure fabric是一個可整合網路伺服器以及儲存體的分散式運算系統(distributed computing system),它提供了在許多實體伺服器主機間的自動化備援(failover)、負載平衡(load balancing)以及資料庫複製等重要功能。
管理服務(management service)提供了伺服器的健康監控、軟體更新(software upgrade)與修補(patch)的自動安裝等等。
4.基礎架構層(Infrastructure Layer):
基礎架構層提供了支援服務層所需的IT基礎架構、實體伺服器與作業系統,以及管理營運等的支援。
資料庫支援與顯露介面

SQL Azure基於Windows Azure提供的帳戶服務支援,因此在Azure服務平台上建立的帳戶均可以使用在SQL Azure上用,同時SQL Azure也是利用Azure服務平台的帳戶識別,當帳戶在Windows Azure上建立並申請使用SQL Azure時(利用SQL Azure入口網站),SQL Azure會利用這個帳戶的資訊產生一個專供該帳戶使用的SQL Azure Server,如果在本機或伺服器上的SQL Server安裝一樣,SQL Azure Server本身是一個獨立的資料庫伺服器環境,擁有自己的master資料庫以及自己的資料庫安全環境(包含使用者與登入資訊)[2]。
每個SQL Azure Server都有一個自己的DNS名稱,例如:mysqlazureserver.ctp.database.windows.net
。
在SQL Azure Server中,使用者可以在這個空間中建立自己的資料庫(利用CREATE DATABASE
指令),一個SQL Azure Server可以包含很多的使用者資料庫,資料庫中可以包含表格以及其他資料庫物件。
SQL Azure支援了大多數的資料型別,也支援了 XML 資料類型,不過有部份資料型別(像是BLOB型別以及地理資料型別)沒有在支援清單中[3]。同時 SQL Azure 也使用了Transact-SQL作為核心查詢語言。目前 SQL Azure 已支援ODBC、ADO.NET以及PHP的存取方式,利用TDS over SSL (Tabular Data Stream over SSL)的方式直接連線到SQL Azure。
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語言元素,像是對資料庫、表格、使用者與登入等的建立、修改與刪除。
- 使用者定義函數。
- 檢視表。
未受支援的Transact-SQL特性:
- SQL CLR。
- 資料庫檔案配置。
- 資料庫映射。
- 分散式查詢。
- 分散式交易。
- 檔案群組管理。
- 全域暫存表格。
- 稀疏資料與索引。
- SQL Server組態選項。
- SQL Server Service Broker
- 系統表格。
- 追踪旗標。
安全性
SQL Azure Server會有兩種安全群組[5]:
- 伺服器角色:有
sds_dbcreator
以及sds_securityadmin
兩種。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的帳戶與安全控制會有下列限制[6]:
- 只有伺服器級主帳戶才具有變更密碼的能力,
sds_securityadmin
群組的成員帳戶不具變更密碼的權限,同時如果要存取master資料庫,則該使用者帳戶必須要被對應到master資料庫,同時伺服器級主帳戶是不可以變更或刪除的,同時只要是被設為伺服器級主帳戶的使用者,就算沒有給予sds_dbcreator
或sds_securityadmin
,仍然可以建立資料庫並管理使用者。 - 只要是登入伺服器,一律以master為預設資料庫,US-English為預設的登入語系。
- 若要執行
CREATE/ALTER/DROP LOGIN
或CREATE/DROP DATABASE
,必須要先連至master資料庫。 - 當要在ADO.NET執行前述指令時,不可以使用參數化命令,而且前述命令於每個SQL批次也只能有一個(且是唯一的一個)。
- 當要執行
CREATE USER
配合FOR/FROM LOGIN
選項時,它也必須是SQL批次中唯一的一個。 - 當要執行
ALTER USER
配合WITH LOGIN
選項時,它也必須是SQL批次中唯一的一個。 - 只有伺服器級主帳戶以及被賦與
sds_dbcreator
角色的成員才有執行CREATE DATABASE
與DROP DATABASE
的權力。 - 只有伺服器級主帳戶以及被賦與
sds_securityadmin
角色的成員才有執行CREATE LOGIN
、ALTER LOGIN
與DROP DATABASE
的權力。 - 若想存取master資料庫,則該帳戶必須要對應到master資料庫。
參考資料
- ^ SQL Azure Architecture
- ^ SQL Azure Provisioning Model
- ^ SQL Azure Data Types
- ^ Overview of Transact-SQL
- ^ Managing Logins and Users in SQL Azure
- ^ Guidelines and Limitations
外部連結
SQL Azure MSDN Online Documentation
SQL Server Data Services Official Site