2002年1月,微软公司提出了“可信赖计算”计划,旨在提高安全性、私密性、可靠性和业务完整性。SQL Server 2005中引入一些安全改进和新的安全特性,以适应“可信赖计算”。在缺省安装情况下,SQL Server 2005默认将只会启用少数核心功能和服务,并且每个安装选项都选择恰当的配置,使得SQL Server 2005安装完成后,拥有一个最小的“攻击表面”。在SQL Server 2005中默认被禁用的服务和组件包括:.NET框架、Service Broker网络连接组件、分析服务的HTTP连接组件。其他一些服务,例如SQL Server代理、全文检索、新的数据转换(DTS)服务,被设置为手动启动。
同时SQL Server 2005提供了“外围应用配置器”工具,以更好的方便系统管理员对SQL Server进行安全的表面配置。我们通过实际的界面来认识和了解相关的设置和功能。
1:打开外围应用配置器工具。选择“所有程序”->"Microsoft SQL Server 2005"->"配置工具"->"SQL Server外围应用配置器“


SQL Server 2005在身份验证方面的增强主要有以下几个方面:
1:基于win2003操作系统上的帐号安全性策略。
在SQL Server 2000中,基于SQL登录的帐号是直接在SQL Server 2000中设置,无法使用安全策略,比如密码强度,过期时间等等。SQL Server 2005中改变了这种现状,在Windows Server 2003或以后的操作系统版本中,SQL Server 2005可以实现
强制登录帐户密码符合本地操作系统的密码策略,SQL Server用户和应用程序角色都可以使用帐号安全性策略,包括密码策略和帐户锁定策略。
在SQL Server 2000中,基于标准SQL登录的帐号在连接验证时,默认是使用明文方式在网络上传输验证凭证,存在验证凭证在网络上被捕获的可能性,带来安全隐患。为避免这种安全隐患,MS建议在SQL Server 2000中使用SSL加密通道进行身份验证。
SQL Server 2005默认对这种现状进行增强,对于标准的SQL登录,验证通道自动使用SQL Server服务器生成的证书进行加密,整个过程是透明的,不需要用户预先配置SSL证书。但这种增强仅适合于客户机与服务器都是SQL Server 2005,对于非SQL Server 2005客户机连接时,验证方式与SQL Server 2000类似。
不论是SQL Server 2000还是SQL Server 2005,都支持多种协议通信,默认提供的通信协议有如下四种:Shared Memory、Named Pipes、Tcp/IP、VIA,在SQL Server中对于实际的通信过程中,并不是直接配置通信协议,,MS对通信协议进行了进一步的封装,SQL Server 2000中,封装成Net Library,并支持配置参数配置,实现协议通信。SQL Server 2005中封装成SNI协议层,但SNI并不支持用户直接配置,而是通过“TDS 端点”对象进行通信。

具体的配置方法如下:
1:选择具体的登录名,右键属性,打开用户登录属性配置界面


5:选择端点后,会列出当前所有的通信协议端点,并可以针对具体的端点授权该登录用户是否可以访问。

在SQL Server 2000中,授权级别基于三级模型,分别是服务器级别、数据库级别以及对象级别。在SQL Server 2005中,权限控制粒度细化,新增了架构级别的权限分配,实现了用户与架构的分离。模型细化成四级:分别是服务器级别,数据库级别、架构级别和对象级别。
对于SQL Server 2000来说,所有权与创建用户是隐式绑定在一起的,一个对象的所有者就是对象创建者。
比如说User1创建了一个表tb_User1,那么这个表的所有者就是user1。
唯一的例外是dbo这个所有者,所有属于sysadmin角色中的用户创建的安全对象默认都是属于同一个所有者:dbo。
服务器名.数据库名.所有者名.表名 (servername.databsename.owner.tablename).
如果是在同一个服务器和同一个数据库中,可以省略成:owner.tablename。
那么对于刚所说的表tb_user1,完整的访问方式应该是user1.tb_user1。
用户与所有者隐式绑定的方式会带来一些问题,考虑如下场景:
在一个实际应用程序中,大量使用到形如user1.tb_user1这样的访问对象方式。
某一天需要删除user1这个用户,但此时无法删除,系统会提示该用户拥有tb_user1这个表对象。可能的解决办法是将tb_user1表对象的所有者转移到其它用户后,再进行用户删除。但此时用户删除后,所有形如user1.tb_user1的访问对象方式就无法使用,必须手动去修改相应的访问代码。
在SQL Server 2005中,对于安全对象的完整的访问方式是:
服务器名.数据库名.架构名.对象名。
1:在Manager Studio中新建一个基于SQL登录的登录名:DBUser
2:新建一个数据库SchemaDemo
3:SchemaDemo数据库中新建用户DBUser,并选择对应的登录名是刚才创建的DBUser,并取消强制密码策略,其它设置不变。
4:在SchemaDemo数据库中授权DBUser用户拥有创建表权限。
方法是右击数据库Schema的属性选择权限,添加了DBUser用户,并给该用户赋予Create Table的权限

默认架构是dbo,没有拥有的架构,也不属于任何数据库角色。
在弹出的对话框中忽略权限警告信息,按“确定”进入实际的建表,保存为


9:新建架构db_SchemaDemo,架构所有者选择DBUser用户。
10:修改DBUser属性,指定DBUser默认架构为db_SchemaDemo。
11:再次以DBUser帐户登录,重复第6步操作,此时新建表tb_User成功,这时该表的名称是:db_SchemaDemo.tb_User,也就是架构名.表名的格式。

本文所阐述的安全性的增强只是整个SQL Server 2005安全性增强的一小部分,实际上在元数据保护,数据加密,审核,以及权限控制粒度等许多方面,SQL Server 2005都做了大量的改进。限于文章篇幅,本文不做太多阐述,请参考SQL联机从书或MS网站等相关资料。