跳转到内容

Microsoft Azure SQL Database

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由小朱留言 | 贡献2010年1月15日 (五) 07:16 安全性编辑。这可能和当前版本存在着巨大的差异。

SQL Azure
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 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級的應用程式(如AJAXSilverlight),則可以先在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用戶端連線架構

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 已支援ODBCADO.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特性:

  • 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_dbcreatorsds_securityadmin,仍然可以建立資料庫並管理使用者。
  • 只要是登入伺服器,一律以master為預設資料庫,US-English為預設的登入語系。
  • 若要執行CREATE/ALTER/DROP LOGINCREATE/DROP DATABASE,必須要先連至master資料庫。
  • 當要在ADO.NET執行前述指令時,不可以使用參數化命令,而且前述命令於每個SQL批次也只能有一個(且是唯一的一個)。
  • 當要執行CREATE USER配合FOR/FROM LOGIN選項時,它也必須是SQL批次中唯一的一個。
  • 當要執行ALTER USER配合WITH LOGIN選項時,它也必須是SQL批次中唯一的一個。
  • 只有伺服器級主帳戶以及被賦與sds_dbcreator角色的成員才有執行CREATE DATABASEDROP DATABASE的權力。
  • 只有伺服器級主帳戶以及被賦與sds_securityadmin角色的成員才有執行CREATE LOGINALTER LOGINDROP DATABASE的權力。
  • 若想存取master資料庫,則該帳戶必須要對應到master資料庫。

參考資料

  1. ^ SQL Azure Architecture
  2. ^ SQL Azure Provisioning Model
  3. ^ SQL Azure Data Types
  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