您的位置:首页 > 数据库

SQL Server数据库加密

2012-08-21 09:50 78 查看

参考文献:

细说SQL Server中的加密

Transparent Data Encryption (TDE)

Database Encryption Key (DEK) management

SQL Server中的加密简介

  在SQL Server2000和以前的版本,是不支持加密的。所有的加密操作都需要在程序中完成。这导致一个问题,数据库中加密的数据仅仅是对某一特定程序有意义,而另外的程序如果没有对应的解密算法,则数据变得毫无意义。举个例子来说,我以前写过一个web应用程序(参考博客:自定义SqlMembershipProvider方法),想让用户信息中的密码字段用密文保存,我是在程序中将用户的明文密码加密以后保存到数据库中的。

  到了SQL Server2005,引入了列级加密。使得加密可以对特定列执行,这个过程涉及4对加密和解密的内置函数。

  SQL Server 2008时代,则引入的了透明数据加密(TDE),所谓的透明数据加密,就是加密在数据库中进行,但从程序的角度来看就好像没有加密一样,和列级加密不同的是,TDE加密的级别是整个数据库。使用TDE加密的数据库文件或备份在另一个没有证书的实例上是不能附加或恢复的。

对称加密与非对称加密

  通常来说,加密可以分为两大类,对称(Symmetric)加密和非对称(Asymmetric)加密。

  对称加密是那些加密和解密使用同一个密钥的加密算法,就是加密密钥=解密密钥。对称加密通常来说会比较羸弱,因为使用数据时不仅仅需要传输数据本身,还是要通过某种方式传输密钥,这很有可能使得密钥在传输的过程中被窃取。

  非对称加密是那些加密和解密使用不同密钥的加密算法,就是加密密钥!=解密密钥。用于加密的密钥称之为公钥,用于解密的密钥称之为私钥。因此安全性相比对称加密来说会大大提高。当然有一长必有一短,非对称加密的方式通常算法会相比对称密钥来说复杂许多,因此会带来性能上的损失。

  因此,一种折中的办法是使用对称密钥来加密数据,而使用非对称密钥来加密对称密钥。这样既可以利用对称密钥的高性能,还可以利用非对称密钥的可靠性。

证书与密钥的创建

每个数据库有且只有一个数据库主密钥(master key),这是一个数据库级别的密钥。可以用于为创建数据库级别的证书或非对称密钥提供加密。通过T-SQL语句创建,如代码1所示。

View Code

--备份master key
BACKUP MASTER KEY TO FILE = 'd:\storedkeys\masterkey' ENCRYPTION BY PASSWORD = 'P@ssw0rd'
go

--备份证书
BACKUP CERTIFICATE MyServerCert TO FILE = 'd:\storedcerts\MyServerCert'; --cert的保存地址
go

--还原master key
use master
RESTORE MASTER KEY
FROM FILE = 'd:\storedkeys\masterkey'
DECRYPTION BY PASSWORD = 'P@ssw0rd'
ENCRYPTION BY PASSWORD = 'P@ssw0rd';
GO
--因为我这里还留有原来的证书,所以会提示如下信息:The old and new master keys are identical. No data re-encryption is required.

--还原证书
CREATE CERTIFICATE MyServerCert2
FROM FILE = 'd:\storedcerts\MyServerCert'
GO
--因为证书已经存在,所以提示如下信息:--A certificate with name 'MyServerCert2' already exists or this certificate already has been added to the database.
--需要注意的是证书并不是按照证书名来区分的。我原来的证书名叫做MyServerCert,此处创建的证书名为MyServerCert2,但是是来自MyServerCert的一个备份,还是报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: