加密
加密就对数据进行处理使之无法被没有正确密钥的用户识别和读取的一个过程。当您处理来自数据库的数据时,有两个最基本的方面需要考虑:通过网络发送数据以及在数据库中存储数据。
网络加密
SQL Server 2005所有版本都支持通过各种不同方式,如IP Security(IP SEC)和安全套接字层(SSL)对网络流加密的能力。相比之下,Oracle仅在Oracle 10g企业版中提供加密功能,并且还需要额外购买高级安全选项。
SQL Server支持两种广泛采用的网络标准来加密通过网络连接发送的数据:SSL和IP SEC。这些协议是由Windows支持的。SSL是通过SQL Server与Internet信息服务(IIS)或者通过SQL Server 2005中包含的证书服务器支持的。
SQL Server 2005提供了自己的证书服务以配置SSL网络加密。通过SQL Server创建的证书与X.509v3 证书标准兼容。SQL Server创建的证书可用于创建SSL连接,或用于SQL服务代理。SQL Server采取了诸如只响应加密的客户端的请求、对于分析服务器等产品,仅将加密的数据流返回给客户端等手段使自己更加安全。
Windows还支持使用IP SEC来加密网络连接通道。Oracle也提供了和SQL Server同样的网络加密功能,但费用很高,需要购买Oracle 10g企业版with高级安全选项。
Oracle还通过高级安全选项提供了使用RSA和DES算法加密数据的功能,类似于SQL Server为数据私密性提供的加密类型。Oracle能够在每个网络发送的数据包上产生一个Message Digest version 5 (MD5)的校验和,因此数据库可以据此判定某个网络包的内容是否被篡改了。当然使用类似于SSL的加密选项可以提供哈希,还可以使用更安全的安全哈希算法(SHA)来更好地抵制攻击。
加密在两个平台上都是可配置的选项。在Oracle 10g企业版附带高级安全选项中默认该选项是关闭的,需要您手工开启;而SQL Server 2005默认则启用该选项以提供最安全的数据环境。您需要考虑是否在安全策略中包括数据私密性,因为您必须在安全级别和应用程序性能二者间权衡利弊。
数据加密
SQL Server 2005通过集成的证书服务器直接提供在数据库中加密数据的功能。SQL Server 2005包含了六个内置函数用于加密和解密数据。
![]()
EncryptByCert
DecryptByCert
EncryptByKey
DecryptByKey
EncryptByAssym
DecryptByAssym
这些函数允许你使用已有的证书(最安全)、一个简单的密钥(密码),或者是非对称密钥(公钥/私钥)加密数据。SQL Server 2005 可以创建和管理自己的证书,从而对存储在数据库中的数据提供十分强大的加密功能。SQL Server 2005中的Transact-SQL也在支持证书管理方面进行了如下的增强。
创建证书:
CREATE CERTIFICATE MyCert
WITH SUBJECT = ‘My Subject’,
ENCRYPTION PASSWORD = ‘jfdsij380fukanfjcxvDJEOD#$fksdwr’,
EXPIRY_DATE = ‘12/31/2006’;
证书创建完成后,您就可以使用EncryptByCert 函数来加密数据并将结果存储在变量中:
DECLARE @VAL nvarchar(8000)
SELECT @VAL = EncryptByCert(Cert_ID(‘MyCert’), N’Some Message’)
然后,您可以使用下面的函数从字段或变量中读出加密前的值:
SELECT CAST(DecryptByCert(Cert_ID(‘MyCert’),
@VAL, N’ jfdsij380fukanfjcxvDJEOD#$fksdwr’)
AS nvarchar)
通过集成的证书服务和更多的加密选项,SQL Server 2005在安全性方面远远超过Oracle提供的特性,即使配备了高级安全选项。
Oracle 10g标准版没有提供加密功能。可以通过购买Oracle 10g企业版来获得加密功能,但即使这样,Oracle提供的加密功能也只能通过单独购买许可的高级安全选项来得到,因为在Oracle中数据一致性和数据加密都是由该选项提供的。
