SQL Azure (之前被称为 SQL Server Data Services) 是由微软SQL Server 2008为主,建构在Windows    Azure云操作系统之上,运行云计算 (Cloud Computing)的关系数据库服务,是一种云存储(Cloud Storage)的实现,提供网络型的应用程序数据存储的服务。
 
图1 SQL Azure Logo
一、基础架构
       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于架构上分成四个层次,如下图2所示:
图2 SQL Azure架构
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数据库以及自己的数据库安全环境(包含用户与登录信息)。
每个SQL Azure Server都有一个自己的DNS名称,例如:mysqlazureserver.ctp.database.windows.net。
       在SQL Azure Server中,用户可以在这个空间中建立自己的数据库(利用CREATE DATABASE指令),一个SQL Azure Server可以包含很多的用户数据库,数据库中可以包含表格以及其他数据库对象。
      SQL Azure支持了大多数的数据型别,也支持了 XML 数据类型,不过有部份数据型别(像是BLOB型别以及地理数据型别)没有在支持清单中。同时 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特性:
  •          常数
  •         数据限制
  •          数据光标
  •         数据库索引管理与索引重建
  •          本地数据库暂存表格
  •          保留字
  •          预存程序
  •          数据库统计管理
  •          数据库交易
  •          触发程序
  •          数据库表、数据表联结以及表格变量
  •          Transact-SQL语言元素,像是对数据库、表格、用户与登录等的建立、修改与删除
  •          用户定义函数
  •          查看表
未受支持的Transact-SQL特性:
  •          SQL CLR
  •          数据库文件配置
  •          数据库映射
  •          分布式查询
  •          分布式交易
  •          文件组群管理
  •          全局暂存表格
  •          稀疏数据与索引
  •          SQL Server组态选项
  •          SQL Server Service Broker
  •          系统表格
  •          追踪旗标。
四、安全性
SQL Azure Server会有两种安全组群:
  1. 服务器角色:有 dbmanager 以及 loginmanager 两种。
    ►dbmanager:赋与用户可以建立数据库(即CREATE DATABASE指令)的权利
    ►loginmanager:赋与用户可以建立登录帐户(即CREATE LOGIN指令)的权利
  2. 数据库角色:与安装在本机或服务器上版本的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的帐户与安全控制会有下列限制:
  •          只有服务器级主帐户才具有变更密码的能力, loginmanager 组群的成员帐户不具变更密码的权限,同时如果要访问master数据库,则该用户帐户必须要被对应到master数据库,同时服务器级主帐户是不可以变更或删除的,同时只要是被设为服务器级主帐户的用户,就算没有给予 dbmanager 或 loginmanager ,仍然可以建立数据库并管理用户
  •          只要是登录服务器,一律以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批次中唯一的一个
  •          只有服务器级主帐户以及被赋与 dbmanager 角色的成员才有运行CREATE DATABASE与DROP DATABASE的权力
  •          只有服务器级主帐户以及被赋与 loginmanager 角色的成员才有运行CREATE LOGIN、ALTER LOGIN与DROP DATABASE的权力
  •          若想访问master数据库,则该帐户必须要对应到master数据库。
 
作者: 付海军
出处:http://space.e800.com.cn/fuhj02
版权:本文版权归作者和亿八佰共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu