在数据库范围内,数据库主密钥是所有密钥、证书和数据库中的数据的根加密对象。每一个数据库可以有一个单独的主密钥;你如果试图创建第二个密钥那你会得到一个错误信息。你必须使用CREATE MASTER KEY Transact-SQL以用户提供的密码来创建一个数据库主密钥:
以下是引用片段: CREATE MASTER KEY ENCRYPTION BY PASSWORD = ''EOhnDGS6!7JKv'' |
SQL Server 使用从密码和服务主密钥获得的一个三重数据加密标准密钥来加密密钥。第一个拷贝存储在数据库中,第二个拷贝存储在主数据库中。让数据库主密钥由服务主密钥来保护,这使得当需要的时候SQL Server可以自动地解密数据库主密钥。终端应用程序或用户不必使用密码打开主密钥,而且这是将密钥保护于层次之中的一个主要的好处。
分离数据库和一个现有的主密钥,并将它移到另一个服务器上,这是一个棘手的事。问题在于新的服务器的服务主密钥和其它的服务器的服务主密钥是不同的。因此,服务器不能自动地解析数据库主密钥。通过使用加密所采用的密码来打开数据库主密钥并使用ALTER MASTER KEY 语句和新的服务主密钥将它加密,这样可以解决这个问题。否则,你总是需要在使用前打开数据库主密钥。
一旦有了数据库主密钥,开发人员就可以使用它来创建三种密钥类型中的任何一个,这取决于所要求的加密类型:
· 非对称密钥,用于具有一个公共密钥和一个私人密钥对的公共密码匙
· 对称密钥,用于使用相同的密钥进行加密和解密数据的共享秘密的情况下
· 证书,实质上是一个公共密钥的封装
有了这所有的加密选项以及它和服务器以及数据库的深入集成,现在加密已经是一个为你的数据添加最后一道防线的可行方法。但是,要明智地使用这个工具,因为加密会对你的服务器增加许多处理消耗。
透明的数据加密
在SQL Server 2005中,你可以通过编写使用数据库引擎的加密功能的定制Transact-SQL来加密数据库中的数据。SQL Server 2008在这基础上推出了透明数据加密。
透明数据加密执行所有的数据库级别的加密操作,这消除了应用程序开发人员创建定制的代码来加密和解密数据的要求。数据在写到磁盘时进行加密,从磁盘读的时候解密。通过使用SQL Server来透明地管理加密和解密,你可以保护数据库中的业务数据而不必对现有的应用程序做任何修改,如图11所示。
图 11:透明数据加密
数据库加密密钥(DEK)是用来执行加密和解密的,这个DEK存储在数据库启动记录中,在恢复场景中可用。你可以使用服务主密钥或硬件安全模块(HSM)来保护这个DEK。HSM通常是USB设备或智能卡,因此不容易被偷或丢失。
5.2 可扩展的密钥管理
随着调整遵从性和对数据保密性的整个关注的不断发展,越来越多的公司使用加密作为一种提供深度防范的解决方案。随着公司使用越来越多的加密和密钥来保护他们的数据,密钥管理变得越来越复杂。一些高安全性的数据库使用上千个密钥,而你必须使用一个系统来存储、释放或重建这些密钥。更进一步的,你应该将这些密钥与数据分开存储,以提高安全性。
SQL Server 2008推出了供第三方供应商使用的加密功能。这些解决方案与SQL Server 2005 和SQL Server 2008数据库无缝地合作使用,提供了企业级的专一的密钥管理。这将密钥管理工作从SQL Server移到了专一的密钥管理系统。
SQL Server 2008中的可扩展的密钥管理还支持HSM的使用,从而提供了密钥和数据物理上的分离。
5.3 代码模块签名
在SQL Server 中进行加密的一