1、详解微软 Microsoft SQL Server 2005的安全策略SQL 服务器 2005 提供了验证和授权方面的很多改进,还有支持加密技术这使得数据库的设计和执行更加安全。软件的安全性是一个重要的话题,因为每天都有一些新的攻击被发现。Windows 2003 服务器是微软下线的第一个标榜着“默认安全”的服务器,这个服务器锁定在默认状态下,你不得不去分别的激活每一个你想得到的服务。所以,对攻击者来说要登陆系统是一件难事。同样的策略也应用在了 SQL 服务器 2005 上:整个数据库服务器被锁定在默认状态下,每项服务和特性都要在明确的被激活才能获得。正因为如此,SQL 服务器和 SQL 服务
2、器界面配置工具一同发行,图 1这样你就可以在安装时决定哪项服务和特性处在激活状态。验证验证是第一个必须成功完成的项目,以便于得到登陆 SQL 服务器的权限,图 2 阐明了该安全概念的模式。图 2和以前版本的相似,SQL 服务器 2005 支持 Windows 和复合验证两种模式,微软建议使用 Windows 验证模式作为安全的保障。在该模式下,安全检查将针对现有目录而执行。但是这种模式的缺点是用户和数据库服务器必须存在于同一现有目录域下。当你使用建立于复合验证模式的 SQL 服务器时,SQL 服务器将提交登陆凭证。该配置在一些方案中很敏感,但是缺点就是你不能够像现有目录那样使用安全的基础配置。
3、SQL 服务器 2005 的一个新功能就是,当你使用 Windows 验证模式时,它可以在验证过程中管理密码和退出策略。你可以管理帐户的权限,比如增强式密码和数据有效期。然而,只有在 Windows 2003 Server 系统中安装的 SQL 服务器 2005 才拥有这样的功能。在其他的 Windows 操作平台上这些功能的应用编程接口(API)不可用。当你设定一个帐户的密码时可以做如下限制:1、 密码长度至少 6 字符(SQL 服务器支持的密码的长度为 1-128 字符)。2、 密码必须使用不同类型的字符(大写字母、小写字母、数字、特殊符号等)。3、 密码中间不能出现“Admin“, “A
4、dministrator“, “Password“, “sa“或 “sysadmin“。4、 除了这些限制外,密码不能为空。当你生成新的注册用户时,你可以通过 SQL 语句 CREATE LOGIN 来使用 CHECK_EXPIRATION 和 CHECK_POLICY 扩展名 。CHECK_EXPIRATION 控制登陆的有效期,CHECK_POLICY 激活上述的密码限制策略。新选项 MUST_CHANGE 使用户在第一次登陆时可以改变密码。(SQL 服务器 2005 测试第二版目前不支持该功能),表 1 列出了这些新功能的代码:表 1CREATE LOGIN Paul WITH PASS
5、WORD=Pssw0rd1MUST_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)是一个你可以有逻辑的将数据库对象
6、(表格、存储规程、视图等)分类的容器。它和.NET Framework 类库里的命名空间一样。 因为 SQL 服务器内的模式也可以拥有一个系主,你可以规定在给定模式里的所有对象都属于同一个系主。SQL 服务器 2000 没有很好的执行模式:模式的名称与用户名相同。所以,在模式和数据库对象的系主之间有直接的关系(见图 3)。(图片较大,请拉动滚动条观看) 图 3SQL 服务器 2000 内的一个大问题就是模式必须使用一个全当限名称(模式.对象名称)。但是当你从数据库内撤销一个用户时,那么对象的全当限名称就改变了。不幸的是,你在数据库内做的这项改变在客户端查询中也改变了,而且这样的改变有时候代价昂
7、贵。在 SQL 服务器 2005 中,模式是数据库中的一个单独对象,有它自己的名字和系主,和用户不再有关系(见图 4)。图 4现在你可以在数据库中删除和增加用户,而不用在软件中更改(即不是在客户端也不是在数据库端)。此外,你可以给模式指派权限来控制在特定模式中访问对象的权限。表二显示了在 SQL 服务器 2005 中的模式的使用。该代码也可以从 Schemas.sql 文件中下载获得。表 2USE masterGO- Create database loginsCREATE LOGIN Paul WITH PASSWORD=pssw0rd1CREATE LOGIN Mary WITH PASS
8、WORD=pssw0rd1USE TestDatabaseGOCREATE USER Paul FOR LOGIN PaulCREATE USER Mary FOR LOGIN Mary- Create a new schemaCREATE SCHEMA SalesData- Create a new table in the schema “SalesData“CREATE TABLE SalesData.SalesPromotion(ID int,Name varchar(255)GRANT ALL ON SalesData TO PaulALTER USER Paul WITH DEFA
9、ULT SCHEMA = SalesDataGRANT 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 是默认选项,只要用户认可就可以执行储存程序。通过 E
10、XECUTE AS USER,你可以指定在哪些用户下该储存程序才执行。当你使用 EXECUTE AS SELF,储存的程序就在创建者的认可下执行。最后,你可以使用 EXECUTE AS OWNER 在对象系主的认可下执行储存程序。密码系统当你请求使用密码系统时,你必须掌管好密码(非对称加密算法个人密码或对称加密算法共享密码),SQL 服务器 2005 提供两种密码管理方案:l Manage the key yourself l SQL Server manages your key 当你自己管理密码时,SQL 服务器通过一个指定的口令在数据库中储存对称密码,你必须在一个安全位置保存口令。当 S
11、QL 服务器代你管理密码时,它采用 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 M
12、aster Key 的方法。表 3CREATE MASTER KEY ENCRYPTION BY PASSWORD=pssw0rd1当你创建了 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
13、来加密。对于对称密码,你必须在第一步中使用 OPEN KEY 语句打开它(这包括解密过程)(见图 6)。在这之后,你可以按照自己的意愿加密。图 6对称密码的好处在于它的性能,它的运行速度比不对称密码快 1,000-10,000 倍。它的缺点是加密和解密使用的是同一个密码,双方都必须知道该密码。你可以通过 CREATE ASYMMETRIC KEY 语句创建不对称密码,不对称密码也可以通过口令或 Database Master Key 来加密。表 4 显示了创建不对称密码的方法。表 4Listing 4- Encryption with a passwordCREATE ASYMMETRIC K
14、EY MyKeyName AUTHORIZATION User1WITH ALGORITHM = RSA_512ENCRYPTED BY PASSWORD = pssw0rd1- Encryption with the database master keyCREATE ASYMMETRIC KEY MyKeyName AUTHORIZATION User1WITH ALGORITHM = RSA_512不对称密码通常储存在 sys.asymmetric_keys 中,创建密码后,你可以通过 EncryptByAsmKey 来给数据加密,使用DecryptByAsmKey 来给数据解密。表 5
15、 显示了加密和解密的功能的用法。表 5DECLARE EncryptedStuff varchar(1000)SELECT EncryptedStuff = EncryptByAsmKey(AsymKey_ID(MyKeyName), My secret message)SELECT EncrytedStuffSELECT CAST(DecryptByAsmKey(AsymKey_ID(MyKeyName), EncryptedStuff)AS VARCHAR)最后,你可以使用证书来加密数据,可以通过将已有证书输入到数据库服务器或通过 T-SQL 语句 CREATE CERTIFICATE 来
16、创建一个新证书。证书也可以通过口令或 Database Master Key 来加密。表 6 显示了这两种可能的方法。表 6- Encryption with a passwordCREATE CERTIFICATE MyCertificateName AUTHORIZATION User1WITH Subject My Subject, EXPIRY_DATE = 12/31/2006,ENCRYPTION_PASSWORD = pssw0rd1- Encryption with the database master keyCREATE CERTIFICATE MyCertificateName AUTHORIZATION User1WITH Subject My Subject加密特性相关的例子也可以从文件 Encryption.sq 里下载。