用户:小朱/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