加密
加密就对数据进行处理使之无法被没有正确密钥的用户识别和读取的一个过程。当您处理来自数据库的数据时,有两个最基本的方面需要考虑:通过网络发送数据以及在数据库中存储数据。
网络加密
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中数据一致性和数据加密都是由该选项提供的。
成本如何?
安全不仅仅是技术,还包括人员和流程,后者比前者更加薄弱。数据库服务器为普通用户提供直观且易于使用的管理工具,从而尽可能提供对人员和流程的支持,这一点十分重要。Oracle 10g提供的基本管理工具(对于Oracle Management Server无须额外付费)使用起来不是很方便,致使管理员在安全他们的数据库和服务器时面临更大的困难,并由此产生安全事故。DBA需要了解他负责管理的数据库服务器的方方面面,但事实上许多企业都无法做到这一点。
不管技术有多么出众,如果安全策略和程序不恰当,如果没有培训用户思考安全性以及避免社交工程陷阱,如果没有实际安全您的数据环境,那么所有的安全特性都没将失去作用。安全首先是通过策略和人员开始的。当您配置了正确的安全策略和程序,就需要选择胜任的技术并以最为经济有效的方式来实现安全策略。下表使用Microsoft网站和Oracle网站提供的关于每个CPU许可费用的数据来说明两个产品在费用上的差异:

通过比较可以看出SQL Server更胜一筹。SQL Server 2005增强了这些特性,通过提供更强的默认安全设置、数据加密、schema支持等等,匹配了 10g为Oracle最新版本数据库提供的功能。使用SQL Server 2005只需投入很少的成本,因为所有安全特性都作为标准组件包含在产品包中。Oracle则需要您购买高级安全包,并且只向Oracle企业版的用户销售,这无疑大大地增加了成本。这意味着Oracle数据库的标准功能中不包括诸如单一登陆集成身份验证、网络包加密、公钥基础架构(PKI)、或者Kerberos等基本安全特性。拥有这些功能选项只能通过额外付费并使用企业版的Oracle数据库。SQL Server 2005将所有这些选项作为标准功能构建在核心数据库产品中。因此两个数据库产品均包含了相同的核心安全特性,使用SQL Server 2005企业可以节省费用并获得相同的安全特性。
从数据库的安全功能的角度如何对两个数据库进行比较呢?二者具有相同的功能,但Oracle收取的费用更高。
您还需要考虑以后硬件升级而发生的成本。Microsoft宣称每CPU许可模式下只对每个插槽(per socket)收取费用,而Oracle则宣称对每个核(per core)收取费用。所有主要的芯片制造商都致力于通过一槽多核的方式来不断增加硬件的处理能力。这意味着未来升级硬件的成本会出您意料地加倍增长,这也因此大大增加了产品的成本。
哪个数据库安全性更高?
衡量一个数据库系统有多么安全还应该包括已登记在册的数据库安全公告、安全事件、或者安全忠告的数目。安全公告显示了数据库开发厂商在产品安全性方面的记录。
从每种数据库发布的安全公告/忠告的数目可以看出,自从SQL Server 2000发布以来Oracle发布的公告要多于Microsoft SQL Server产品。此处是几个独立机构关于最近几年Oracle和SQL Server发布公告数目的统计。
计算机事件咨询中心
计算机事件咨询中心在 http://www.ciac.org/ciac/bulletinsByType/vndr_oracle_bulletins.html列出自2003年起Oracle的10个安全事件,其中2004有3个,2003年有7个。
同一来源报告Microsoft SQL Server在同期内只有2个安全事件,其中2004年有1个,2003年有1个。 http://www.ciac.org/ciac/bulletinsByType/vndr_ms_bulletins.html#ms_sql
卡耐基梅隆软件工程学院
卡耐基梅隆软件工程学院(http://www.cert.org/)列出在过去两年里Oracle有9个安全公告。
卡耐基梅隆软件工程学院列出同样在过去两年内有3个SQL Server安全公告。
国家标准和技术委员会
国家标准和技术委员会(http://www.nist.gov/)报告了81个Oracle的安全事件。 (http://icat.nist.gov/icat.cfm?vendor_command=Oracle&product_command=Oracle)
同一组织报告同期内仅有46个SQL Server安全事件 (http://icat.nist.gov/icat.cfm?vendor_command=Microsoft&product_command=SQL Server)。
根据事件/公告的报告结果,SQL Server的安全事件要比Oracle少50%。这些事实证明SQL Server比Oracle更安全。企业在考虑数据安全时,还需要考虑应用安全补丁和更新的流程——因为如果存在安全事件,企业就需要给服务器打补丁。
安全补丁的重要性
企业实施资源安全的时候通常能够快速关注于可用的安全技术,如防火墙或者虚拟个人网(VPNs),但很多面临的实际障碍就是能让所有被选中的安全技术一起工作并实现全面的安全策略,让人员、流程和技术一起工作。安全策略中就包括了如何提供好的补丁管理。根据Forrester研究所的Michael Rasmussen的观点,“这是因为软件永远存在问题,解决问题的唯一答案就是将补丁应用到包括了人员和流程的系统中”。
软件是不断发展的,永远不会完美无缺,因此必然包含bugs。有时这些bugs会影响系统安全性,恶意用户有可能利用这些bugs获得系统访问权。许多组织机构如CERT和secunia.com会跟踪与安全有关的bugs。. 这些组织还会根据bugs导致的安全问题的严重级别对bugs进行等级划分。您应该时刻关注这些站点以及应用程序开发商的Web站点,检查是否有新的补丁。此外安全流程中还应该增加给系统打补丁这一流程。Oracle和SQL Server都提供了各自的补丁系统。我们来比较一下在查找安全漏洞、查找补丁、以及给数据库服务器打补丁的过程中两个数据库产品有何异同。

图15:SQL Server Web站点
Microsoft将发布适用于SQL Server 2005的安全公告和补丁。这些公告可以帮助您了解和评估您现有的业务环境面临的潜在威胁,以及如何抵消这些威胁。SQL Server Web site(图15) 在其产品页面上提供了最新安全公告的快速连接。
管理员可以通过图16所示的网站了解有关最新的安全技术。

图16:Microsoft安全公告站点
Oracle和Microsoft在通知客户重要补丁方面均做出了出色的工作。您可以在Oracle或Microsoft网站(图17)订阅安全警告;两家公司都能够快速地为客户提供重要补丁。网站都具有良好的组织结构因此您可以快速地找到您想要的补丁。

图17:Oracle的Security Alert站点