SQL Azure (舊稱 SQL Server Data Services 或 SQL Services) 是由微軟SQL Server 2008為主,建構(gòu)在Windows Azure云操作系統(tǒng)之上,運(yùn)行云計(jì)算 (Cloud Computing)的關(guān)系數(shù)據(jù)庫服務(wù) (Database as a Service),是一種云存儲(chǔ)(Cloud Storage)的實(shí)現(xiàn),提供網(wǎng)絡(luò)型的應(yīng)用程序數(shù)據(jù)存儲(chǔ)的服務(wù)。
基礎(chǔ)架構(gòu)
SQL Azure的基底是SQL Server 2008,不過它是一個(gè)特殊設(shè)計(jì)的SQL Server 2008,并且以Windows Azure為基座平臺(tái),配合Windows Azure的特性,SQL Azure也是一種分散在許多實(shí)體基礎(chǔ)架構(gòu)(Physical Infrastucture)與其內(nèi)部許多虛擬服務(wù)器(Virtual Servers)的一種云存儲(chǔ)服務(wù),外部應(yīng)用程序或服務(wù)可以不用在乎數(shù)據(jù)庫實(shí)際存儲(chǔ)在哪里,就可以利用SQL Azure顯露的SQL Server Fabric殼層服務(wù)以接受外部連接,并且在內(nèi)部使用連接繞送 (connection routing) 的方式,讓連接可以對(duì)應(yīng)到正確的服務(wù)器,而且數(shù)據(jù)庫是在云中由多個(gè)服務(wù)器來提供服務(wù),每一次連接所提供服務(wù)的服務(wù)器可能會(huì)不同,因此也可以保證云存儲(chǔ)的高度可用性(High availability)。
SQL Azure 架構(gòu)在數(shù)據(jù)中心可分為三個(gè)部份:
1. 服務(wù)提供層 (Service Layer):
服務(wù)提供層是 SQL Azure 顯露在客戶端前面的服務(wù)接口 (Facade 模式),負(fù)責(zé)接取所有向 SQL Azure 提交要求的 TDS over SSL 連接與指令,當(dāng)連接進(jìn)入 SQL Azure 時(shí),SQL Azure Load Balancer 會(huì)分派連接到不同的 SQL Azure Gateway 中。SQL Azure Gateway系負(fù)責(zé)處理 TDS 連接,管理連接層安全性 (connection-level security) 以及解析指令是否有內(nèi)含潛在威脅的指令,再交由連接管理員 (Connection Manager) 將連接分派到位于平臺(tái)提供層內(nèi)不同的 SQL Azure 數(shù)據(jù)庫服務(wù)器中進(jìn)行處理,SQL Azure Gateway 也會(huì)管理對(duì) SQL Azure 的連接,以避免可能會(huì)封鎖住服務(wù)器的連接 (例如過長(zhǎng)的查詢或過長(zhǎng)的數(shù)據(jù)庫交易等)。
2. 平臺(tái)提供層 (Platform Layer):
平臺(tái)提供層則是以 Windows Azure Computes 的虛擬機(jī)簇 (Cluster),每臺(tái)虛擬機(jī)都安裝有 SQL Server 2008 以及管理一定數(shù)量的數(shù)據(jù)庫,通常一份數(shù)據(jù)庫會(huì)分散到三至五臺(tái)的 SQL Server VM 中,而每臺(tái) SQL Server VM 也安裝了 SQL Azure Fabric 中控軟件,并通過 SQL Azure Fabric 與 SQL Azure Gateway 的管控下,所有對(duì)單一數(shù)據(jù)庫的連接都不一定會(huì)持續(xù)連入同一臺(tái) SQL Server VM 中。SQL Server VM 內(nèi)也安裝了 SQL Azure Management Service,它會(huì)負(fù)責(zé)對(duì)每個(gè)數(shù)據(jù)庫間的數(shù)據(jù)復(fù)寫工作,以保障 SQL Azure 的基本高可用性要求。每臺(tái) SQL Server VM 內(nèi)的 SQL Azure Fabric 和 Management Service 都會(huì)彼此交換健康與監(jiān)控信息等,以保持整體服務(wù)的健康與可監(jiān)控性。
3. 基礎(chǔ)建設(shè)層 (Infrastructure Layer):
基礎(chǔ)建設(shè)層由 Windows Azure Computes 以及其高度可擴(kuò)充性的運(yùn)算與網(wǎng)絡(luò)基礎(chǔ)架構(gòu)來組成,以支持 SQL Azure 所需的高可用性以及高擴(kuò)充性等云特色。
供應(yīng)模型
SQL Azure 服務(wù)對(duì)外的供應(yīng)模型 (Provisioning Model) 的設(shè)計(jì)以平緩企業(yè)進(jìn)入云的學(xué)習(xí)曲線為主要考量,因此 SQL Azure 對(duì)外提供的是一臺(tái)邏輯服務(wù)器 (Logical Server),此服務(wù)器是由 SQL Azure Gateway 所顯露,每一個(gè) Windows Azure 的帳戶都可以創(chuàng)建一臺(tái) SQL Azure Server,就像在本地的 SQL Server 運(yùn)行個(gè)體一樣,但這個(gè)運(yùn)行個(gè)體是在云上運(yùn)行且具有高可用性等特征的數(shù)據(jù)庫服務(wù)器。
每臺(tái) SQL Azure Server 都具有下列內(nèi)容:
DNS 名稱,客戶端應(yīng)用程序要使用這個(gè) DNS 名稱連入數(shù)據(jù)庫,格式為 [serverid].database.windows.net。
master 數(shù)據(jù)庫,此數(shù)據(jù)庫會(huì)存放登錄信息 (logins),服務(wù)器角色以及管理服務(wù)器所必要的動(dòng)態(tài)管理查看表 (Dynamic Management View)。
SQL Azure 防火墻,用來管理連入 SQL Azure Server 的連接來源。
用戶數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫都有不同的計(jì)費(fèi)標(biāo)準(zhǔn),大小由 1GB 到 50GB 不等。一臺(tái) SQL Azure Server 可以有多個(gè)用戶數(shù)據(jù)庫。
客戶端只要可以支持 TDS (Tabular Data Stream) over SSL,即可連接與訪問 SQL Azure Server 的數(shù)據(jù)庫資源,這表示像ODBC、ADO.NET或JDBC的 SQL Server 最新版驅(qū)動(dòng)程序或SQL Native Client Library都可以連接到SQL Azure Server。
Transact-SQL的支持
作為SQL Server版本Transact-SQL的子集,不是所有的功能在SQL Azure上都有被支持,由于實(shí)體服務(wù)器架構(gòu)以及安全性的問題,許多分布式的查詢法以及常用的數(shù)據(jù)庫復(fù)制法都沒有辦法被SQL Azure支持,而在SQL Server 2005開始加入的SQL CLR能力也無法在SQL Azure上支持(因?yàn)樗仨氁獟燧d在SQL Azure實(shí)體服務(wù)器上,但客戶端通常無法知道當(dāng)下連到的服務(wù)器是否為有安裝SQL CLR組件的那一臺(tái))。
安全性
SQL Azure 的安全性有兩個(gè)部份,一個(gè)是管理傳輸層次安全性的防火墻,一個(gè)是管理訪問控制的基本安全功能。
防火墻
每個(gè) SQL Azure Server 都會(huì)有自己的防火墻 (Firewall) 設(shè)置,管理人員可以自由設(shè)置下列不同的客戶端來源模型:
只允許云應(yīng)用程序訪問 SQL Azure Server,網(wǎng)段設(shè)為 0.0.0.0-0.0.0.0
單一或多重網(wǎng)址 (address)。
單一或多重網(wǎng)段 (segment)。
SQL Azure Server 的防火墻設(shè)置會(huì)存儲(chǔ)在 SQL Azure Gateway 中,作為管控客戶端連接之用。
基本安全功能
SQL Azure Server會(huì)有兩種安全組群:
服務(wù)器角色:有 dbmanager 以及 loginmanager 兩種。
dbmanager:賦與用戶可以創(chuàng)建數(shù)據(jù)庫(即CREATE DATABASE指令)的權(quán)利。
loginmanager:賦與用戶可以創(chuàng)建登錄帳戶(即CREATE LOGIN指令)的權(quán)利。
數(shù)據(jù)庫角色:與安裝在本機(jī)或服務(wù)器上版本的SQL Server相同。
SQL Azure Server目前只支持使用SQL驗(yàn)證(SQL Authentication)的安全驗(yàn)證方式,以往的Windows驗(yàn)證在SQL Azure上不支持。而在SQL Azure Server創(chuàng)建時(shí),除了master數(shù)據(jù)庫以外,還會(huì)再多創(chuàng)建一個(gè)具有SQL Server的sa帳戶相等權(quán)力的帳戶,供用戶操作SQL Azure Server用,此帳戶稱為服務(wù)器級(jí)主帳戶(server-level principal),基于數(shù)據(jù)庫的安全,管理人員必須要在 SQL Azure Server 中再創(chuàng)建一個(gè)或多個(gè)登錄帳戶后,再授權(quán)給數(shù)據(jù)庫,客戶端應(yīng)用程序不宜使用服務(wù)器級(jí)主帳戶來訪問 SQL Azure Server 與數(shù)據(jù)庫。
限制
SQL Azure 基于架構(gòu)上的設(shè)計(jì)與天生的限制,SQL Azure Server的帳戶與安全控制會(huì)有下列限制[6]:
只有服務(wù)器級(jí)主帳戶才具有變更密碼的能力, loginmanager 組群的成員帳戶不具變更密碼的權(quán)限,同時(shí)如果要訪問master數(shù)據(jù)庫,則該用戶帳戶必須要被對(duì)應(yīng)到master數(shù)據(jù)庫,同時(shí)服務(wù)器級(jí)主帳戶是不可以變更或刪除的,同時(shí)只要是被設(shè)為服務(wù)器級(jí)主帳戶的用戶,就算沒有給予 dbmanager 或 loginmanager ,仍然可以創(chuàng)建數(shù)據(jù)庫并管理用戶。
只要是登錄服務(wù)器,一律以master為默認(rèn)數(shù)據(jù)庫,US-English為默認(rèn)的登錄語系。
若要運(yùn)行CREATE/ALTER/DROP LOGIN或CREATE/DROP DATABASE,必須要先連至master數(shù)據(jù)庫。
當(dāng)要在ADO.NET運(yùn)行前述指令時(shí),不可以使用參數(shù)化命令,而且前述命令于每個(gè)SQL批量也只能有一個(gè)(且是唯一的一個(gè))。
當(dāng)要運(yùn)行CREATE USER配合FOR/FROM LOGIN選項(xiàng)時(shí),它也必須是SQL批量中唯一的一個(gè)。
當(dāng)要運(yùn)行ALTER USER配合WITH LOGIN選項(xiàng)時(shí),它也必須是SQL批量中唯一的一個(gè)。
只有服務(wù)器級(jí)主帳戶以及被賦與 dbmanager 角色的成員才有運(yùn)行CREATE DATABASE與DROP DATABASE的權(quán)力。
只有服務(wù)器級(jí)主帳戶以及被賦與 loginmanager 角色的成員才有運(yùn)行CREATE LOGIN、ALTER LOGIN與DROP DATABASE的權(quán)力。
若想訪問master數(shù)據(jù)庫,則該帳戶必須要對(duì)應(yīng)到master數(shù)據(jù)庫。