火网互联--常见问题帮助中心!

火网互联IDC咨询中心-建站帮助教程|vps面板|vps问题|腾讯云问题|服务器问题|美国空间|美国空间购买|美国虚拟主机|高防空间|腾讯云|香港空间

当前位置: 主页 > 安全 >

探讨SQL Server 2005的安全策略

时间:2011-05-08 13:06来源:互联网 作者:佚名 点击:
一、简介 SQL2005是继SQLServer2000之后的又一次重大成功。单从安全方面看,它在认证和授权方面比以往都有了大幅度的提高;同时,它还提供了本机加密支持能够实现比以往其它版本更安全的应用程序设计和实现。 自古以来,软件安全是一个相当重要的问题。2003S
一、简介

SQL2005是继SQLServer2000之后的又一次重大成功。单从安全方面看,它在认证和授权方面比以往都有了大幅度的提高;同时,它还提供了本机加密支持—能够实现比以往其它版本更安全的应用程序设计和实现。

“自古以来”,软件安全是一个相当重要的问题。2003Server是微软第一个“缺省安全”产品。缺省情况下,整个是被锁定的,所以,你必须自己去激活每个你想要使用的服务。因此,一个攻击者必须花费相当的代价才能攻破该系统。

与此相同的策略被应用到SQLServer2005中。缺省地,整个数据库服务器也被锁定,这样每个服务和特性必须通过手工激活才能使用。由于这个原因,SQLServer与SQLServer表面区域工具一同发行—通过这个配置工具,你可以定义在SQLServer的安装过程中哪些服务和特性将被激活。

本文我们主要分析一下在新版的SQLServer2005中,其在安全方面作出的重大改进。


二、认证

认证是你成功存取SQLServer的第一步。下图1展示了这种安全概念背后的相应模型。


图1.SQLServer的安全概念
就象以前的版本一样,SQLServer2005也支持Windows和混合的认证方式。由于安全原因,微软特别推荐使用Windows认证方式。在这种方式下,安全检查是针对于进行的;但是,这样的缺点是,用户和数据库服务器必须驻留在相同的活动目录域内。

当你使用SQLServer混合认证方式时,由SQLServer负责处理登录委任状。这种配置在有些时候非常重要;但是,随之而来的缺限是你无法使用诸如活动目录等所提供的底层安全架构。

SQLServer2005新增的一项功能就是,当你使用Windows认证模式时,它能够对认证过程的口令字和注销策略进行管理。你可以管理帐户约束、如强口令字或终止日期等。然而必须注意,只有在SQLServer2005安装到Windows2003Server上时你才能使用这些特性。另外,这些功能相应的API在其它Windows平台上是无法使用的。

在你为一个帐户设置口令时,可以使用下列限制:

口令的长度必须是至少6个字符(SQLServer支持从1到128个字符的口令长度)。

口令必须使用不同类型的字符(大写,小写,数字,特殊的符号等等)。

口令中不能包含象“Admin”,“Administrator”,“Password”,“sa”或者“sysadmin”这样的短语。

除这些限制以外,一个口令字不能为空。

当你建立一个新的登录时,你可以通过T-SQL语句CREATELOGIN使用扩展的CHECK_EXPIRATION和CHECK_POLICY来实现。CHECK_EXPIRATION能够控制登录的终止日期,而CHECK_POLICY用于激活上面描述的口令策略机制。新的选项MUST_CHANGE能够让用户在第一次登录时可以改变他/她的口令(SQLServer2005Beta2版不支持这个特征)。列表1展示了使用这些新选项的部分代码:

列表1


CREATELOGINPaulWITHPASSWORD=‘P@ssw0rd1‘

MUST_CHANGE,CHECK_EXPIRATION=ON,CHECK_POLICY=ON

SQLServer2005也支持终点认证以确保SQLServer在通过平台上的http.sys对外提供XMLWeb服务时进行安全的通讯。

三、授权

在一个用户被SQLServer成功地认证后,接下来进行的是授权过程以决定该用户在数据库上有哪些权限。在这一方面,SQLServer2005又增加了两个新特性:

用户与模式分离开来

执行上下文

用户和模式的分离

模式是一个容器—你可以在其中对数据库对象(表,,视图,等等。)进行逻辑分组。这与框架基类库中的命名空间是一样的。因为SQLServer中的一个模式也可能有一个所有者,因此你可以指令在一个给定模式中的每个对象都拥有一个相同的所有者。SQLServer2000的实现模式并不很好:模式的名字与用户的名字是相同的。因此,在模式和数据库对象的所有者之间存在一个直接的关系(见图2)。

图2.原来在SQLServer2000中的用户和模式关系
SQLServer2000中的最大问题在于在一给定模式中的对象必须使用完全限定名(schema.objectname);但是,当你从数据库中删除一个表时,该对象的完全限定名会发生改变。因此,你对数据库所作的改变将也会不幸地发生到客户端的查询中,而且有时这样的改变将付出昂贵的代价。而在SQLServer2005中,模式成为数据库中一个单独的拥有名字和所有者的本机对象。这样的模式与用户不再存在关系(见图3)。

图3.在SQLServer2005中用户和模式分离开来

现在,你能在数据库中删除和添加新用户而不用修改软件(客户端和数据库端都不用)。而且,你能把权限赋给一个模式以实现对该模式中对象的存取。列表2展示了SQLServer2005中的模式用法。
列表2

USEmaster

GO

--建立数据库登录

CREATELOGINPaulWITHPASSWORD=‘p@ssw0rd1‘

CREATELOGINMaryWITHPASSWORD=‘p@ssw0rd1‘

USETestDatabase

GO

CREATEUSERPaulFORLOGINPaul

CREATEUSERMaryFORLOGINMary

--创建一新模式

CREATESCHEMASalesData

--在模式“SalesData”中创建一新表

CREATETABLESalesData.SalesPromotion

)

GRANTALLONSalesDataTOPaul

ALTERUSERPaulWITHDEFAULTSCHEMA=SalesData

GRANTSELECTONSCHEMA::SalesDataTOMARY

执行上下文

SQLServer2005的另外一个新特征是允许你改变一个存储过程的执行上下文。你可以通过用EXECUTEAS语句来改变执行上下文进而控制这些数据库对象是以哪些用户身份执行的。EXECUTEAS语句支持下列选项:

EXECUTEASCALLER

EXECUTEASUSER=‘username‘

EXECUTEASSELF

EXECUTEASOWNER

EXECUTEASCALLER是默认选项,这时一个存储过程是以调用用户的身份执行的。使用EXECUTEASUSER选项时,存储过程则用你指定的用户身份执行。当你使用EXECUTEASSELF时,存储过程用创建者的身份执行。最后,你可以使用EXECUTEASOWNER来执行存储过程,其身份是该对象的所有者。

四、密码学技术

当你在某一应用程序中使用密码学技术时,你必须设法对密钥(或是一非对称算法的私人密钥或是一对称算法的共享密钥)进行管理。SQLServer2005提供了两个选项来管理用户密钥:

用户自己管理密钥

由SQLServer为你管理密钥

当你自己管理密钥时,SQLServer用存在于数据库中的一给定口令字来存储对称密钥,这时你必须把该口令字保存在一个秘密的地方。而当由SQLServer来替你管理密钥时,它使用服务主键和数据库主键技术。图4展示了这一概念背后的思想。


图4.SQLServer2005中的服务和数据库主键

正如你所见,这个服务主键处于服务器级别上。该键在SQLServer安装过程中被创建并且通过数据保护API(DPAPI)保护起来。用几个T-SQL语句,你就能把服务主键复制到一个文件中并能够从文件中恢复回去。

数据库主键处于数据库级上并且必须通过administrator来显式地创建。可以通过口令或服务主键来对该主键进行加密。列表3说明了如何主键:

列表3

CREATEMASTERKEYENCRYPTIONBYPASSWORD=‘p@ssw0rd1‘
一旦你创建了数据库主键,你就拥有了下列选项:

用对称密钥加密

用非对称密钥加密

用证书加密

你可以用T-SQL语句“CREATESYMMETRICKEY”来创建一对称密钥。这样的加密是通过一存储在表sys.symmetric_keys中的口令字或数据库主键进行的。为了使用一对称密钥,你必须先用语句OPENKEY(见图5)打开它(这包括密钥的解密),之后,你就可以把该密钥用于你自己的加密目的。

图5.用对称密钥进行加密
对称密钥的优点在于它的高性能—它大约比同样的非对称密钥快1,000到10,000倍。缺点是加密和解密都使用一把密钥,而且双方都必须知道该密钥。你可以用语句“CREATEASYMMETRICKEY”来创建一非对称密钥。这样的密钥还可以通过一口令字或数据库主键来加密。列表4告诉你如何创建一非对称密钥:

列表4

--用口令加密

CREATEASYMMETRICKEYMyKeyNameAUTHORIZATIONUser1

WITHALGORITHM=RSA_512

ENCRYPTEDBYPASSWORD=‘p@ssw0rd1‘

--用数据库主键加密

CREATEASYMMETRICKEYMyKeyNameAUTHORIZATIONUser1

WITHALGORITHM=RSA_512
一非对称密钥总是被存储在表sys.asymmetric_keys中。在你创建该密钥后,你能使用函数EncryptByAsmKey来加密数据而用DecryptByAsmKey来解密被加密的数据。列表5展示了这两个函数的使用:

列表5


DECLARE@EncryptedStuffvarchar

SELECT@EncryptedStuff=EncryptByAsmKey,

‘Mysecretmessage‘)

SELECT@EncrytedStuff

SELECTCAST,EncryptedStuff)

ASVARCHAR)
最后,你还可以使用证书来加密数据,或者是一个现有证书—把它导入进数据库服务器中即可或是一个通过T-SQL语句“CREATECERTIFICATE”创建的新证书。一个证书本身也能通过一口令字或通过数据库主键被加密。列表6显示出这两种可能性:

--用口令加密

CREATECERTIFICATEMyCertificateNameAUTHORIZATIONUser1

WITHSubject‘MySubject‘,

EXPIRY_DATE=‘12/31/2006‘,

ENCRYPTION_PASSWORD=‘p@ssw0rd1‘

--用数据库主键加密

CREATECERTIFICATEMyCertificateNameAUTHORIZATIONUser1

WITHSubject‘MySubject‘
五、小结

本文通过一些片断示例,分析了SQLServer2005在安全方面提供的新功能。尤其应注意到,它在密码功能上作了很大改进。SQLServer2005将更加成熟起来并在大型企业开发领域发挥重要作用。
(责任编辑:admin)
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------