SQL Server 2008作为微软新一代的数据库管理产品,其建立在SQL Server 2005的基础上,在性能、稳定性、易用性方面都有相当大的改进。SQL Server 2008 R2,作为 Microsoft 的完整信息的平台,使收集、管理和使用业务信息更容易,也为企业提供了更经济高效的解决方案。微软将于五月发布的Microsoft SQL Server 2008 R2是SQL Server数据库的最新版本,其中包含了大量新特性,其中的R2标志表示这是SQL Server的中间版本,而不是一个主版本,但是其中较上一个版本也提供了很多很有用的新功能。在之前的SQL Server 2005和SQL Server 2008的基础之上,SQL Server 2008 R2版本做了很多方面的改进来增强和扩展其安全性,提供了功能强大的透明加密和密钥管理功能、强身份验证和访问控制的安全性增强功能、有助于有效管理安全性功能配置策略、以及增强的安全审核,本文将就SQL Server 2008 R2版本在这几方面对安全性的改进做简要介绍:
1. SQL Server 2005安全性回顾
数据库的安全性是指保护数据库,以防止不合法的使用造成的数据泄漏、更改或破坏。SQL Server 2005分别增强了DDL行为捕获及审核、数据加密、目录安全性、用户及结构分离、执行上下文、登陆凭据加密等几项功能来解决相应安全问题,如下表1所示:
安全性问题 |
对应功能 |
弱密码 |
密码策略 |
缺乏审核机制 |
DDL行文的捕获及审核 |
元数据保护 |
目录安全性 |
架构级的访问权限 |
用户及架构的分离 |
模块执行过程中的安全粒度控制 |
执行上下文 |
保护数据的访问 |
登陆凭证加密 |
表1 SQL Server 2005安全增强的对应关系
2. SQL Server 2008 R2安全性概述
SQL Server 2008 R2提供了许多旨在该神数据库总体安全性的增强功能的新功能,增加了密钥加密和身份验证功能,并引入了新的审核系统,以帮助用户加强对策略的审核。在数据库存储安全方面有了比较大的变化,已不在提供SQL Server 2005外围应用配置器工具。
3. 增强的数据库加密
SQL Server 2000及其早期版本不支持加密存数在数据库中的数据,SQL Server 2008在加密方面有两个主要的改进:一、SQL Server可以使用存储在外部第三方安全模块上的加密密钥。二,对存储在SQL Server中的数据,可采用对连接到该数据库的应用程序透明的方法来对其进行加密,这样数据库管理员可以轻松的对整个数据库中存储的数据进行加密,而不必修改现有的应用程序代码。
第一个改进是通过新的可扩展密钥管理(EKM)功能实现的,SQL Server 2008 R2为数据加密和密钥管理提供了全面的解决方案,通过支持第三方密钥管理和硬件安全模块(HSM)产品,可以满足对数据中心信息日益增加的高安全性需求。在SQL Server 2008 R2 Enterprise、Developer和Evaluation版本中提供有该功能。EKM使企业密钥管理和硬件安全管理模块(Hardware Security Module,HSM)解决方案的第三方供应商可在SQL Server中注册其设备,一旦设备注册了,用户则可使用模块中存储的加密密钥,供应商则可在这些模块中提供高级加密功能(如密钥老化和密钥轮换),由外部硬件执行加密和解密操作。在特定的配置上,还可以使用非系统管理员组成员的数据库管理员提供的数据保护,可在后续的操作中用T-SQL加密语句使用存储在外部EKM设备上的密钥来加密和解密,EKM设备密钥结构如下图1所示。
图1 EKM设备密钥结构
使用EKM的优点在于:
- 可使用第三方的企业密钥管理系统
•整合整个企业的密钥管理
•简化密钥的存储和管理
•提供包括密钥生成、获取、过期、循环处理等管理机制
•提供额外的身份验证保护
-提供企业级的加密手段
•整合和简化整个企业的加密框架
•通过硬件加密手段提高性能
- 通过安全模块分离密钥和数据
•在物理上分开存储数据和密钥
•避免dbo访问密钥
•提供SQL Server没有的高级密钥管理机制
另一个新功能是透明加密,SQL Server 2008 R2可以对整个数据库、数据文件和日志文件进行加密,而不需要改动应用程序 。对数据进行加密可使公司满足遵守规范和极其关注的隐私数据的需求,透明数据加密的优点是可以在任何范围或模糊查询已加密数据、加强数据的安全性要求以防止未授权用户对数据的越权访问。它允许用户再不必更改应用程序的情况下机密数据库文件,可对数据和日志文件执行实时I/O读、写时加密和解密,如下图2所示。加密所使用的数据库加密密钥(Database Encryption Key,DEK)存储在数据库引导记录中,用于执行加密和解密操作,以便在恢复时仍可使用,DEK的安全性则由服务主密钥(Servive Master Key)或硬件安全模块(Hardware Security Module,HSM)保护,HSM通常是USB设备或智能卡,因而不易被盗或丢失。DEK 的安全则由存储在服务器主数据库中的一个证书来保证。下图3中显示了实现透明数据加密的体系结构。
图2 透明数据加密
透明数据加密可以加密数据库中的敏感数据,并且使用证书来保护用于加密数据的密钥,可以帮助用户遵循与正确保护数据相关的众多法律、法规和行业标准。透明书籍加密允许软件开发人员使用高级加密标(AES)和三重数据加密标准(3DES)加密算法来加密数据,数据库文件的加密是在页面级执行的,再写入磁盘之前加密页面,然后在读入内存时解密,对于启用了透明数据加密的数据库备份文件,也使用数据库加密密钥进行了加密,要恢复已加密的数据库,用户必须有权访问用于加密数据库的证书或非对称密钥。如果没有证书或非对称成密钥将无法恢复数据库,所以务必保留访问相关备份所需的任意密钥。
图3 透明数据加密的体系结构
l 使用透明数据库加密的理由:
• 整个数据库都进行了加密
• 应用程序不受到加密和解密的影响
– 索引和数据类型不受到影响(除了FileStream)
– 不需要调用任何加密和解密函数
• 性能影响相当小
• 没有密钥不能使用备份
l 透明数据加密的应用场景,如下图4所示
图4透明数据加密的应用场景
1. 代码模块签名
在SQL Server 2008 R2中提供加密的另外一个好处就是提供了证书可以对代码模块(函数、存储过程、事件通知和触发器)进行数字签名的能力,这样对于数据库表和其他对象访问的粒度控制就能做到更细,如果经过签名的代码模块只能通过代码访问特定的表数据,则经过恶意修改的代码模块由于未经过签名,则不能进行未授权的操作。签名代码模块还能防止对代码模块做出未经授权的更改,和其他进过数字签名的文档一样,在代码改变时,证书将会失效,代码不在证书上下文中执行时,任何被提供了证书访问权限的对象都将不可访问。若要继续访问,则需要创建一个证书,将该证书与新用户关联并使用该证书签名代码块,授予该用户执行该代码块必要的任何权限。事实上这样做已经将该用户作为次级身份标识添加到了代码块安全上下文中,最后授予要执行该代码块的用户和角色执行权限。下列代码展示了以上的步骤,假设用户想要签名mySchema.GetSecretStuffs过程,并且所有引用的对象已经存在与数据库中:
CREATE CERTIFICATE certCodeSigning ENCRYPTION BY PASSWORD = 'Pass%DwrO4!JaXfLxnC' WITH SUBJECT = 'Code signing certificate' GO -- Sign the stored procedure ADD SIGNATURE TO mySchema.GetSecretStuffs BY CERTIFICATE certCodeSigning WITH PASSWORD = 'Pass%DwrO4!JaXfLxnC' GO -- Map a user to the certificate CREATE USER certUser FOR CERTIFICATE certCodeSigning GO --Assign SELECT permissions to new certUser GRANT SELECT ON SocialSecurity TO certUser GO -- Grant execute permission to the user who will run the code GRANT EXECUTE ON mySchema.GetSecretStuffs TO ProcedureUser GO |
2. 集成身份验证改进
在以往的SQL Server 2005中仅TCP/IP支持Kerberos,而且要使用Kerberos对连接进行相互身份验证,必须在 Active Directory中注册SQL Server实例的服务主体名称 (SPN),并且客户端驱动程序必须在连接时提供已注册的SPN。在SQL Server 2008 R2中,Kerberos 身份验证已扩展到所有网络协议,包括TCP、命名管道、共享内存和虚拟接口适配器(VIA)。默认情况下,客户端驱动程序会自动推断出所连接SQL Server实例的正确 SPN,不再需要在活动目录中注册SPN就可以支持Kerberos。还可在连接字符串参数中显式指定SPN,以提供更好的安全性、控制和故障排除功能。
3. 基于策略的管理
SQL Server 2008 R2增加了基于策略的管理方式,可以将策略应用于单个数据库、单个SQL Server实例或所管理的所有SQL Server,通过基于策略的管理,可检测SQL Server配置选项和安全设置是否合法,对于某些安全设置还可创建策略来检测不合规则的数据库服务器,并采取措施使其合法有效。在SQL Server 2008 R2中默认禁用了许多不必要的功能,以最小化受攻击的可能,基于策略的管理可以有选择性的启用所需的任何功能,将相关属性归纳成组,并将其放到成为层面的组件中,如,外围应用配置器层面包含用于远程查询、CLR集成、数据库邮件、OLE自动化、远程DAC、Web助手和xp_cmdshell的属性,可以创建策略来启用CLR集成但禁用其他功能。
层面强制执行设置的能力各有不同,具体取决于其相关 DDL 语句能否在非自动提交模式下运行。有时,层面可强制在数据库引擎实例上实施某个配置设置,但管理员仍可重新配置设置。有些层面可通过服务器触发器来强制实施——从而可以防止低权限用户更改设置,并降低管理员意外地更改设置的机率。此时,管理员必须先暂时禁用该策略,然后才能更改设置。其他一些层面仅报告属性的状态,而无法更改属性。如下图5所示为,检查对称或非对称密钥长度的策略。
图5 检查对称或非对称密钥长度的策略
7. 增强的审核
SQL Server 2005中关于审核的功能有:
– SQL Trace
– DDL/DML Trigger
– 利用第三方软件解析日志文件内容
– 没有管理工具支持
• SQL Server 2008新增了以下特性:
– SQL Audit审核作为直接的服务器对象
– 有DDL支持审核的配置和管理
– 支持安全性
SQL Server Audit 还比 SQL Server Trace 更快,并且 SQL Server Management Studio 使审核日志的创建和监控变得简单。现在,审核级别更加精细,甚至可以捕获单个用户的 SELECT、INSERT、UPDATE、DELETE、REFERENCES 和 EXECUTE 语句。另外,SQL Server Audit 可通过 T-SQL 语句 CREATE SERVER AUDIT 和 CREATE SERVER AUDIT SPECIFICATION 以及相关的 ALTER 和 DROP 语句来实现完全脚本化。
SQL Server 2008 R2中可以将审核信息存储在审核日志中,可以写入以下位置:
– 文件
– Windows应用程序日志
– Windows安全日志
为了写到Windows安全日志中去,SQL Server 安全必须被配置为作为本地系统、本地服务、网络服务或一个具有SeAuditPrivilege权限但不是交互的用户的域帐户来运行。为了创建一个审核对象,必须使用CREATE SERVER AUDIT语句。这个语句定义了一个审核对象,并将它与一个目的地相关联。这个特定的选项习惯于配置一个依赖于审核目的地的审核对象。例如,下面的Transact-SQL代码创建了两个审核对象;一个记录活动到一个文件中,另一个记录活动到Windows应用程序日志中:
CREATE SERVER AUDIT HIPAA_File_Audit TO FILE ( FILEPATH=’\\SQLPROD_1\Audit\’ ); CREATE SERVER AUDIT HIPAA_AppLog_Audit TO APPLICATION_LOG WITH ( QUEUE_DELAY = 500, ON_FAILURE = SHUTDOWN); |
注意在记录到一个文件目的地中时,文件名称没有在CREATE SERVER AUDIT语句中指定。审核文件名称采用AuditName_AuditGUID_nn_TS.sqlaudit 的形式,其中AuditName 是审核对象的名称,AuditGUID是与审核对象关联的唯一标识符,nn是用于分割文件组的分区编码,而TS是一个timestamp类型的值。例如,通过之前的代码示例创建了HIPAA_FILE_Audit审核对象,它可以产生一个日志文件,其名称与下面的类似:
HIPAA_File_Audit_{65A441F8-DEF3-44ad-B9C6-126B65257223}_00_29384.sqlaudit
可以使用QUEUE_DELAY 审核选项为性能原因执行异步的审核,而ON_FAILURE选项决定当审核信息不能写到目的地时所要采取的行动。在之前的HIPAA_AppLog_Audit示例中所显示的,ON_FAILURE选项配置为当日志不能写的时候关闭SQL Server示例;在这种情况下,执行CREATE SERVER AUDIT语句的用户必须具有SHUTDOWN权限。
在创建了一个审核对象时,你可以使用CREATE SERVER AUDIT SPECIFICATION和CREATE DATABASE AUDIT SPECIFICATION语句为它添加事件。CREATE SERVER AUDIT SPECIFICATION 添加服务器级别的行动组(在服务器级别会发生的相关行动的预定义集合)到一个审核中去。例如,下面的代码添加了FAILED_LOGIN_GROUP 行动组(它记录了失败的登陆尝试)到HIPAA_File_Audit审核中去。
CREATE SERVER AUDIT SPECIFICATION Failed_Login_Spec FOR SERVER AUDIT HIPAA_File_Audit ADD (FAILED_LOGIN_GROUP); |
CREATE DATABASE AUDIT SPECIFICATION语句添加数据库级别的行动组和将单个的数据库事件添加到一个审核中去。添加单独的行动使得你可以过滤基于这个活动涉及的对象和用户来记录的行动。例如,下面的代码示例添加了DATABASE_OBJECT_CHANGE_GROUP行动组(它记录数据库中的任何CREATE、ALTER或DROP操作)和将用户SalesUser或 SalesAdmin在Sales schema中对对象执行的任何INSERT, UPDATE, or DELETE语句添加到HIPAA_AppLog_Audit审核中去。
CREATE DATABASE AUDIT SPECIFICATION Sales_Audit_Spec FOR SERVER AUDIT HIPAA_AppLog_Audit ADD (DATABASE_OBJECT_CHANGE_GROUP), ADD (INSERT, UPDATE, DELETE ON Schema::Sales BY SalesUser, SalesAdmin); |
审核对象提供了一个可管理的审核框架,它使得定义应该被记录的事件和日志应该存储的位置变得很容易。这个对SQL Server 的补充帮助你执行一个完全的审核解决方案来保护你的数据库和满足调整遵从性要求。
8. 总结
安全性一直都是SQL Server致力改善的一个领域。SQL Server 2008 R2版本做了很多方面的改进来增强和扩展其安全性,提供了功能强大的透明加密和密钥管理功能、强身份验证和访问控制的安全性增强功能、有助于有效管理安全性功能配置策略、以及增强的安全审核,能够帮助用户在有效保证业务系统安全、稳定运行的同时,带来新的商业价值和激动人心的应用体验。
作者: 天行健
出处:http://fuhj02.cnblogs.com
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://txj.shell.tor.hu