SQL服务器2005提供了验证和授权方面的很多改进,还有支持加密技术——这使得数据库的设计和执行更加安全。
软件的安全性是一个重要的话题,因为每天都有一些新的攻击被发现。Windows 2003服务器是微软下线的第一个标榜着“默认安全”的服务器,这个服务器锁定在默认状态下,你不得不去分别的激活每一个你想得到的服务。
所以,对攻击者来说要登陆系统是一件难事。同样的策略也应用在了SQL服务器2005上:整个数据库服务器被锁定在默认状态下,每项服务和特性都要在明确的被激活才能获得。正因为如此,SQL服务器和SQL服务器界面配置工具一同发行,
·瑞星病毒监测报告(2005.12.12-2005.12·使用VS2005打造简单分页浏览器·快下载:微软免费提供VB2005电子书·三分钟学会打字,神奇数字五笔2005.1·安装指南:SQL Server 2005安装及界面·体验另类的微软MCE2005·教你用WPS2005演示制作播放按钮·VS.NET2005 Beta2初体验·SQL 2005的SSIS与Oracle的迁移性能·Norton SystemWorks 2005体验
图1
这样你就可以在安装时决定哪项服务和特性处在激活状态。
验证
验证是第一个必须成功完成的项目,以便于得到登陆SQL服务器的权限,图2阐明了该安全概念的模式。
图2
和以前版本的相似,SQL服务器2005支持Windows和复合验证两种模式,微软建议使用Windows验证模式作为安全的保障。在该模式下,安全检查将针对现有目录而执行。但是这种模式的缺点是用户和数据库服务器必须存在于同一现有目录域下。
当你使用建立于复合验证模式的SQL服务器时,SQL服务器将提交登陆凭证。该配置在一些方案中很敏感,但是缺点就是你不能够像现有目录那样使用安全的基础配置。
SQL服务器2005的一个新功能就是,当你使用Windows验证模式时,它可以在验证过程中管理密码和退出策略。你可以管理帐户的权限,比如增强式密码和数据有效期。然而,只有在Windows 2003 Server系统中安装的SQL 服务器2005才拥有这样的功能。在其他的Windows操作平台上这些功能的应用编程接口(API)不可用。
当你设定一个帐户的密码时可以做如下限制:
1、 密码长度至少6字符(SQL服务器支持的密码的长度为1-128字符)。
2、 密码必须使用不同类型的字符(大写字母、小写字母、数字、特殊符号等)。
3、 密码中间不能出现"Admin", "Administrator", "Password", "sa"或 "sysadmin"。
4、 除了这些限制外,密码不能为空。
当你生成新的注册用户时,你可以通过SQL语句CREATE LOGIN来使用CHECK_EXPIRATION和CHECK_POLICY扩展名 。CHECK_EXPIRATION控制登陆的有效期,CHECK_POLICY激活上述的密码限制策略。
新选项MUST_CHANGE使用户在第一次登陆时可以改变密码。(SQL服务器2005测试第二版目前不支持该功能),表1列出了这些新功能的代码:
表1
CREATE LOGIN Paul
WITH PASSWORD='P@ssw0rd1'
MUST_CHANGE,
CHECK_EXPIRATION = ON,
CHECK_POLICY = ON
在Windows Server 2003操作平台运行的SQL服务器2005也可支持端点验证,这样可以确保当SQL服务器通过Http.sys暴露XML Web服务时能够安全的交流信息。
授权
当用户成功通过SQL服务器的验证后,授权程序将决定用户在数据库中有哪些权利。在这个部分,SQL服务器2005有两个新的特性:
l 用户和模式(Schema)分离
l 执行语境
用户和模式(Schema)分离
模式(Schema)是一个你可以有逻辑的将数据库对象(表格、存储规程、视图等)分类的容器。它和.NET Framework类库里的命名空间一样。 因为SQL服务器内的模式也可以拥有一个系主,你可以规定在给定模式里的所有对象都属于同一个系主。SQL服务器2000没有很好的执行模式:模式的名称与用户名相同。所以,在模式和数据库对象的系主之间有直接的关系(见图3)。
(图片较大,请拉动滚动条观看)
图3
SQL服务器2000内的一个大问题就是模式必须使用一个全当限名称(模式.对象名称)。但是当你从数据库内撤销一个用户时,那么对象的全当限名称就改变了。不幸的是,你在数据库内做的这项改变在客户端查询中也改变了,而且这样的改变有时候代价昂贵。在SQL服务器2005中,模式是数据库中的一个单独对象,有它自己的名字和系主,和用户不再有关系(见图4)。
图4
现在你可以在数据库中删除和增加用户,而不用在软件中更改(即不是在客户端也不是在数据库端)。此外,你可以给模式指派权限来控制在特定模式中访问对象的权限。
表二显示了在SQL服务器2005中的模式的使用。该代码也可以从Schemas.sql文件中下载获得。
表2
USE master
GO
-- Create database logins
CREATE LOGIN Paul WITH PASSWORD='p@ssw0rd1'
CREATE LOGIN Mary WITH PASSWORD='p@ssw0rd1'
USE TestDatabase
GO
CREATE USER Paul FOR LOGIN Paul
CREATE USER Mary FOR LOGIN Mary
-- Create a new schema
CREATE SCHEMA SalesData
-- Create a new table in the schema "SalesData"
CREATE TABLE SalesData.SalesPromotion
(
ID int,
[Name] varchar(255)
)
GRANT ALL ON SalesData TO Paul
ALTER USER Paul WITH DEFAULT SCHEMA = SalesData
GRANT SELECT ON SCHEMA::SalesData TO MARY
执行语境
SQL服务器2005的另一个特性就是可以让你改变存储程序、用户定义功能、触发程序的执行语境。你可以通过EXECUTE AS语句来改变执行语境从而控制在哪个用户下面执行这些数据库对象。这可支持下列选项:
l EXECUTE AS CALLER
l EXECUTE AS USER='user name'
l EXECUTE AS SELF
l EXECUTE AS OWNER
EXECUTE AS CALLER是默认选项,只要用户认可就可以执行储存程序。通过 EXECUTE AS USER,你可以指定在哪些用户下该储存程序才执行。当你使用EXECUTE AS SELF,储存的程序就在创建者的认可下执行。最后,你可以使用EXECUTE AS OWNER在对象系主的认可下执行储存程序。
密码系统
当你请求使用密码系统时,你必须掌管好密码(非对称加密算法个人密码或对称加密算法共享密码),SQL服务器2005提供两种密码管理方案:
l Manage the key yourself
l SQL Server manages your key
当你自己管理密码时,SQL服务器通过一个指定的口令在数据库中储存对称密码,你必须在一个安全位置保存口令。当SQL服务器代你管理密码时,它采用Service Master Key和Database Master Key。
图5显示了该过程。
图5
正如你所看到的,Service Master Key存在于服务器水平,这个密码是在安装SQL服务器过程生成的,并受到数据保护API(DPAPI)的保护。通过一些T-SQL语句,你可以将Service Master Key转储到一个文件里,然后从文件里还原。
Database Master Key存在于数据库水平,必须是由管理员来创建。它可以通过口令或Service Master Key来加密。表3显示了创建Database Master Key的方法。
表3
CREATE MASTER KEY ENCRYPTION BY PASSWORD='p@ssw0rd1'
当你创建了Database Master Key后,将出现以下选项:
l Encryption with a symmetric key
l Encryption with an asymmetric key
l Encryption with a certificate
你可以使用T-SQL语句CREATE SYMMETRIC KEY来创建对称密码。可通过口令或存储在sys.symmetric_keys中的Database Master Key来加密。对于对称密码,你必须在第一步中使用OPEN KEY 语句打开它(这包括解密过程)(见图6)。在这之后,你可以按照自己的意愿加密。
图6
对称密码的好处在于它的性能,它的运行速度比不对称密码快1,000-10,000倍。它的缺点是加密和解密使用的是同一个密码,双方都必须知道该密码。你可以通过CREATE ASYMMETRIC KEY语句创建不对称密码,不对称密码也可以通过口令或Database Master Key来加密。
表4显示了创建不对称密码的方法。
表4
Listing 4
-- Encryption with a password
CREATE ASYMMETRIC KEY MyKeyName AUTHORIZATION User1
WITH ALGORITHM = RSA_512
ENCRYPTED BY PASSWORD = 'p@ssw0rd1'
-- Encryption with the database master key
CREATE ASYMMETRIC KEY MyKeyName AUTHORIZATION User1
WITH ALGORITHM = RSA_512
不对称密码通常储存在sys.asymmetric_keys中,创建密码后,你可以通过EncryptByAsmKey来给数据加密,使用DecryptByAsmKey 来给数据解密。表5显示了加密和解密的功能的用法。
表5
DECLARE @EncryptedStuff varchar(1000)
SELECT @EncryptedStuff = EncryptByAsmKey(AsymKey_ID('MyKeyName'),
'My secret message')
SELECT @EncrytedStuff
SELECT CAST(DecryptByAsmKey(AsymKey_ID('MyKeyName'),