SQL Server 2005的XML支持机制和安全机制

2016-02-19 14:46 6 1 收藏

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐SQL Server 2005的XML支持机制和安全机制,无聊中的都看过来。

【 tulaoshi.com - 编程语言 】

  本文详细介绍了SQL Server对XML支持,其中增强的特性,全新的面向XML的存储体系,SQL Server认证机制的安全性改进,分级的数据库访问实体机制,借助CLR控制.Net Assembly的执行过程,上下文定义特性等。

  Internet:我用最XML的方式支持你

  SQL Server对XML支持

  Internet平台应用除了通信部分与其他应用有本质区别外,作为基本的应用组成没有实质区别,无非是处理逻辑和业务数据模型。在HTTP为基础的Internet上,XML数据通过自描述性、可扩展能力和跨平台优势,获得了包括微软在内的数据厂商的支持,因此作为微软整个.Net计划的中心产品——SQL Server 2005也要顺应应用趋势,面向XML尤其是XML Web Service提供存储、发布、交换和整合的支持。

  SQL Server 2000的时候已经增加了对XML的支持,而且可以通过HTTP访问获得XML数据,相应的开发也通过SQLXML单独安装开发包,不过在SQL Server 2005中对XML数据访问的支持有了大幅度增强。

  对XML支持的增强特性

  (1)增加了专门的XML数据类型。

  (2)提供了对XQuery的全面支持,可以通过XQuery在关系数据库的基础上,通过查询引擎把二维的关系数据结果组织成层次型的XML数据。

  (3)不仅提供查询,SQL Server 2005还一并提供了XML DML,可以通过INSERT、UPDATE、DELETE完成对XML数据片段的修改。

  (4)与以往关系数据库索引不同,新的数据库引擎还提供面向XML数据的层次性索引,统一XML索引解决了以往开发人员对于在已知Schema上批量数据快速查询的支持。

  (5)通过增强分布式查询的OPENROWSET的功能,提高同构甚至异构系统间批量XML数据的处理效率。

  (6) 此外,对于SQL Server 2000引入的FOR XML子句和OPENXML()提供更好的支持。

  全新的面向XML的存储体系

  在新的平台上,普遍的开发技术组合是 ADO.Net 2.0 + XML + SQL Server。即便在国内这种开发模式已经非常普遍,已经用于在建的很多项目,况且在微软的家族内部报表服务、集成服务、数据分析服务已经全面支持XML,而且在开发领域.Net的配置文件也是XML,甚至ADO.Net用户交换的DataSet和DataTable都是完全可以XML化的。但是,以往的SQL Server产品没有办法解决存储上的冲突,层次结构的XML虽然被保存到了关系数据库里面。由于一般采用BLOB方式,因此只能以高前端程序讨论XSD或者DTD进行验证。而且由于以前没有配备XML索引,因此进行检索需要逐个把BLOB中的数据提取出来之后,再进行比较,这样效率非常低。为了提高效率以往还采用拆分XML文件,通过XML View借助关系数据库的查询优化来减少这种批量检索的性能损失。总而言之,SQL Server 2000处理XML到处都感觉比较“别扭”。

  有了SQL Server 2005的混合存储之后,笔者认为新的体系对XML使用有如下好处:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  (1)对于商业应用要求而言,关系数据与XML数据都有了事务性的保证。

  (2)面对专门的XML数据对象,可以通过配置XSD或者DTD验证数据。

  (3) 对于应用开发而言,提供了与ADO.Net同样的模式。

  (4)可以在混合结构上通过索引进行快速检索。

  (5)对于管理员而言,可以进行统一的备份/恢复、授权、访问控制、复制、数据集成调度。

  是你吗?不管怎么说我的数据我做主

  作为您或者您的企业的关键数据的中心载体,进行必要的安全保护将是保证业务系统正常运转的必要条件,当然实现这个目标需要开发和运行维护团队人员根据数据库的功能特性进行集成和配置。

  SQL Server认证机制的安全性改进

图1:SQL Server的认证机制

  如上图,SQL Server认证同时提供SQL Server本地账号与Windows继承认证两种方式,以往在企业环境中相信读者可以通过配置活动目录的密码策略来控制诸如下面一些策略:

  (1)是否采用强密码

  (2)密码长度

  (3)密码过期时间

  (4)验证错误锁定次数

  (5) 账号是否Enable

  而在SQL Server 以往的版本中本地账号上这些控制似乎很弱。在SQL Server 2005中,所有的Login不仅可以通过“用户名/密码”方式进行认证,还可以通过证书方式进行,这对于具有异构操作系统平台的企业CA环境而言,提供了最为便捷的方式。对于Login Policy的配置可以通过内值函数LOGINPROPERTY获得,了解相关的配置策略信息。

图2:配置Login的密码策略

  代码示例1:通过LOGINPROPERTY获得Login的安全策略

LOGINPROPERTY ( 'login_name' ,
{ 'IsLocked' | 'IsExpired' | 'IsMustChange'     
|'BadPasswordCount' | 'BadPasswordTime'      
| 'HistoryLength' | 'LockoutTime'
| 'PasswordLastSetTime' | 'PasswordHash' } )
  示例1.确认用户是否需要修改密码

SELECT LOGINPROPERTY('WillisJO', 'IsMustChange');
GO
  示例2:确认Login是否已经被锁定

SELECT LOGINPROPERTY('SamirK', 'IsLocked');
GO
  分级的数据库访问实体机制

  在以往的SQL Server中,SQL Server采用的是SQL Server Instance层次的Login和数据库层次的Role、User,总而言是从SQL Server自身的角度确认那些访问实体(用户或者是应用程序)可以访问数据库。SQL Server2005 按照访问的范围把访问实体化分为三大类Principal:Windows级、SQL Server级和Database级。具体包括如下。

  Windows-级的Principal:Windows Domain login、Windows Local login

  SQL Server级的Principal:SQL Server login

  Database级的Principal:Database User、Database Role、Application Role

  SQL Server 2005中增加了一个新的概念——Securable,它代表由数据库引擎控制访问的各种数据库资源。根据三层访问实体的划分,对应的在每个层次也出现了不同的Securable对象,如下说明。

  数据库服务器范围内的:EndPoint、Login、Database

  数据库范围内的:User、Role、Application role、Assembly 、Message Type、Route、Service 、Remote Service Binding、Fulltext Catalog、Certificate、Asymmetric Key 、Symmetric Key 、Contract、Schema

  而在Schema范围内:Type 、XML Schema Collection 、Object

  Object他包括如下几类:Aggregate、Constraint、Function 、Procedure、Queue、Statistic、Synonym 、Table、View

  因此,在明确了Principal、Securable和Object三者关系之后,每一个Principal对于SQL Server的访问控制就可以通过如下关系获得:

图3:配置Principal、Securable与Securable的关系

  在明确上文分层的Principal和分层的Securable之后,相信读者自然而然会发现其实在SQL Server 2005的设计中,权限(Permission)本身也是具有层次性的,可以用DCL语言(GRANT、DENY、REVOKE)来管理与配置它们。下图是一个完整的SQL Server 2005Principal、Securable和Permission的层次嵌套关系:

图4:Principal、Securable和Permission层次嵌套关系

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  在Management Studio中的配置界面如下:

图5:配置Principal对Securable访问权限的过程

  借助CLR控制.Net Assembly的执行过程

  如上文所说,SQL Server 2005继承了CLR,同时也就将CLR对于.Net Assembly的控制集成到了他的安全体系之中,目的是要确保功能强大的.Net代码不至于伤害到SQL Server或者是他的运行环境。默认情况下SQL Server 2005提供了Safe(安全访问SQL Server内部数据)、External_Access(以托管方式可以访问SQL Server内部或部分外部资源)和Unsafe(非托管方式,可以直接访问系统平台接口和本地Windows 32 API)三个代码执行范围等级。通过对.Net Assembly配置执行范围等级,可以粗略的控制代码访问范围。不过笔者更建议读者通过配置.Net Framework Configuration完成,这样做的主要好处是一方面可以很容易的通过域策略将配置好的模版作分发,对于整个企业运行环境进行集中管理有很大好处。

  “看我七十二变的”的上下文定义特性


  相信以往信息上线的时候,数据库应用开发人员与数据库管理人员可能会因为应用需要过多的执行能力发生争执,作为数据库管理员(DBA)一般都是按照最小化原则配置访问权限,并且希望应用的执行账号(企业应用中常常会采用代理账号访问数据库)尽量限制在其自己的Schema内部,尤其不要访问注册表、活动目录、媒体资料库等敏感的系统资源。但是,应用规模大了难免出现个别特例,万般无奈之下数据库管理员只得为应用的账号配置一个BUILDIN / Administrators或者Domain Admins级别的权限。这样,如果一旦出现代码注入等问题的时候,威胁的不仅仅是数据库本身,甚至是下层的Windows运行环境。

  SQL Server 2005的Executing Context提供了“七十二变”的办法,可以为调用链中的某个执行步骤配置不同的用户身份,这样即便出现个别系统敏感访问的时候,也只需要为这些步骤配置单独的执行账号。

 

图6:执行过程中交换Context的示例

来源:http://www.tulaoshi.com/n/20160219/1607845.html

延伸阅读
相比SQL Server 2000提供的FOR XML查询,SQL Server 2005版本对现有功能增强的基础上增加了不少新功能,最为吸引人的功能包括对Xml数据类型支持、使用PATH模式以及嵌套FOR XML查询支持等,这意味着通过新的FOR XML查询功能可以构造出结构更加灵活的Xml数据。 在SQL Server 2000中FOR XML查询的结果是直接以文本方式返回到客户端,为支...
标签: SQLServer
内存区域 SQL Server是分2块区域来组织内存分配,分别是Bpool (缓冲池区)和MemToLeave (内存释放区),如果你使用AWE内存,那么实际上有第三个区:Windows AWE支持的高于3GB的物理内存区。 缓冲池区是这3块内存区中最卓越的,是SQL SERVER最初分配的缓冲池供最初的数据页和索引页使用,并且被用来分配小于8K的内存。MemToLeave 是由虚拟内存...
标签: Web开发
首先要明确一个基本原则,XML类型的数据之间以及XML类型与其它数据类型之间都是不能比较的,也就是说XML类型的数据不能出现在等号的任何一边。 大致可分为查询类,修改类和跨域查询类。 查询类包含query(),value(),exist()和nodes(). 修改类包含modify(). 跨域查询类包含sql:variable()和sql:column(). 查询类 ...
标签: SQLServer
可访问大地址的应用 (Large-Address-Aware Executables) 在Windows增加支持/3GB参数以前,一个应用程序是无法访问一个带有高位设置的指针.一个32位的指针只有前31位地址空间可以被用户模式的应用程序访问.这剩余的一位不用.因此有一些聪明的开发者因为其他的目的不愿意在处理内存地址空间时浪费这一位.(举例来说:可以用来标志一个指针引用其它...
标签: SQLServer
SQL Server开发人员和管理员们都需要了解可用特性,只要他们安装了SQL Server 2005。这个最新的SQL Server 版本包含了一个经过改善的安全模型,可以对数据库服务器和里面的数据库对象进行更好的控制。在这篇文章中,我们将会重点讨论两个新的工具:表面区域配置工具和SQL 浏览器服务。我们还会讨论SQL Server配置管理器,虽然从SQL Server2000以...

经验教程

282

收藏

31
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部