透明加密保数据库安全

2016-03-15 22:33
网络安全和信息化 2016年7期
关键词:解密日志备份

引言:在企业管理,网站维护,程序开发等环境中,SQL Server数据库使用极为广泛。在SQL Server数据库中,往往保存了大量的重要数据。因此,如何保证数据库的安全性,防止其中的数据被盗取或者篡改,是保证SQL Server正常运作必须面对的问题。

使用加密技术可以有效保护SQL Server数据库的安全。例如,在SQL Server 2008中,就可以使用数据加密,数据操作身份审核,身份验证协议等手段,来提高数据库的安全性。这里就以如何使用数据透明加密为例,来说明具体的实现方法。

在SQL Server 2008中,提供了透明数据加密技 术(即 Transparent Data Encryption),对整个数据库进行保护,可以自动加密SQL Server的数据文件和日志文件。透明加密是在物理文件层次运作,即使没有加密证书,也可以防止执行数据库文件还原和附加等操作。例如,当需要将数据库恢复或者附加到另外的SQL Server实例上时,就必须提供加密时使用的加密密钥证书,否则操作无法进行。之前的SQL Server数据加密操作,针对的都是表中的字段,数据记录等对象,无法从根本上保护数据库文件的安全。

而透明加密及时保护的对象是数据库文件,日志文件和备份文件。该加密方式是在页级别工作的,相关数据库中的页会在写入磁盘之前加密,在读取到内存之前解密。之所以叫透明数据加密,是因为这种加密在使用数据库的程序或用户看来,就好像没有加密一样。TDE加密是数据库级别的。数据的加密和解密是以页为单位,由数据引擎执行的。在写入时进行加密,在读出时进行解密。客户端程序完全不用做任何操作。所谓页,指的是数据库中一个I/O操作的基本单位,数据库的页是在磁盘上保存物理记录的单位,这是逻辑的概念,有利于物理记录的管理。

TDE的主要作用是保护数据库的安全,例如当数据库备份或数据文件被黑客盗取之后,当其在没有数据加密密钥的情况下,是无法恢复或附加数据库的。透明加密技术使用数据库加密密钥,对数据库进行加密处理。该密钥存储在数据库启动记录中,对于对称密钥来说,透明加密功能使用存储在数据库实例中的Master数据库中的证书对其进行保护。对于非对称密钥来说,可以使用外部密钥管理模块对其加以保护。使用透明加密技术,必须为数据库创建一个主密钥,例如运行SQL Server Management Studio,连 接 到SQL服 务器,点击菜单“文件”→“新建”→“数据库引擎查询”项,或者点击工具栏上的“数据查询”按钮,在查询输入窗口中执行“create master key encryption by password ='jiamikey!@#'”语句,创建名为“jiamikey!@#”的主密钥。注意,该密钥必须符合Windows的密码策略要求。对应的,执行“DROP MASTER KEY”语句,可以删除主密钥。

可以根据需要,对数据库主密钥的属性进行修改,例如执行“alter master key regenerate with encryption by password =jiamikey!@#'”语句,来重建数据库主密钥以及受其保护的密钥。如果使用“Force”参数,例如执行“alter master key force regenerate with encryption by password =jiamikey!@#'”语句,表示即使主密钥不可用,该密钥的重建过程也会强制执行,这适用于主密钥无法恢复或者解密失败的情况。执行“alter master key add encryption by password= jiamikey!@#'”,“alter master key add encryption by service master key”语句,可以使用服务主密钥,对主密钥的副本进行加密,之后将副本保存在当前数据库和Master数据库中。执行“alter master key drop encryption by password= 'jiamikey!@#'”,“alter master key drop encryption by service master key”语句,可以删除服务主密钥对数据库主密钥的加密信息。

当创建了主密钥之后,需要及时对其进行备份。例如执行“backup master key to file = 'E:zhukey'encryption by password= 'jiamikey!@#'”语句,将其备份到指定的文件中。对应的。执行“restore master key from file ='E:zhukey' decryption by password = 'jiamikey!@#'encryption by password ='jiamiqwe!@#'”语句,可以导入之前备份的主密钥。在“encryption by password”参数中可以指定新的密钥信息。

接下来需要创建或取得由Master数据库保护的证书,例如执行“use master”,“create certificate wodecertificate encryption by password= 'certificate!@#' with subject = 'EnryptData certificate', start_date ='20150101',expiry_date= '20190101'”,“Go”等命令,可以创建指定名称的证书,并指定用于对私钥加密的密码,如果不使用“encryption by password =' certificate!@#'”语句,则自动使用数据库主密钥对私钥进行加密。利用证书可以使用数据库级的内部公钥对数据表的字段等对象进行加密,之后使用数据库级的内部私钥对其解密。

对证书进行备份时很有必要的,例如执行“backup certificate wodecertificate to file = 'E:wodecertificate.cer'with private key (file = 'E:wodecertificate_key.pvk' ,decryption by pass word = 'hellocertificate!@#',encryption by password='hellocertificate' )”语句,可以将证书备份到指定的文件中,同时设定私钥文件保存位置,以及对私钥进行加密和解密的密码。对应的,执 行“create certificate mycertificate from file='E:wodecertificate.cer' with private key(file ='E:wodecertificate_key.pvk', decryption by pass word ='hellocertificate!@#')”语句,可以执行证书的还原操作。如果想删除证书,可以执行“drop certificate wodecertificate”语句,就可以将名为“Mycertificate” 的证书删除。

对数据库进行透明加密,需要创建对应的加密密钥。例如需要你对名为“shilidb”的数据库进行加密的话,可以执行“use shilidb”,“create database encryption key with algorithm = AES_128 encryption by Server certificate wodecertificate”语句,为指定的数据库创建加密密钥,该密钥使用上述创建的证书。如果需要对该加密密钥进行修改的话,例如修改其加密算法,可以执行“use shilidb”,“alter database encryption key with algorithm = AES_256 encryption by Server certificate wodecertificate”,“Go”等语句,将其加密算法修改为“AES_256”。执行“alter database shilidb set encryption ON”语句,将“shilidb”数据库设置为透明加密状态。当启用了透明加密后,目标数据库所有相关文件组都将进行加密。

当对受到透明加密的数据库进行备份后,当试图在其他SQL Server服务器上对其还原时,是无法进行操作的。要想解决问题,只有在该SQL Server服务器上创建同样的证书。还以上面的例子进行说明,在本SQL Server上执行“use master”,“go”,“ backup certificate wodecertificate to file = 'E:wodecertificate.cer' with private key ( file = 'E:wodecertificate_key.pvk',decryption by password =' hellocertificate!@#'”,“go”命令,将本地的证书导出为独立的文件。之后在目标SQL Server服务器上执行“use master”,“go”,“create master key encryption by password= 'jiamikey!@#'”,“go”,“use master”,“go”,“create certificate mycertificate from file ='E:wodecertificate.cer'with private key (file ='E:wodecertificate_key.pvk',decryption by password ='hellocertificate!@#')”,“go”等语句,在该SQL Server服务器上创建相同的证书和主密钥。这样,执行“restore database shili from disk = 'E:datashili.bak'with move 'shili'TO 'E:shujukushili.mdf' move 'shili_log' TO'E:shujukushilildf'”等语句,就可以在该机上执行数据库还原操作了,假设使用的数据库名为“shili”。

在加密时,需要对数据库相关文件进行更改操作,如果数据库中的任何文件夹设置为只读状态,加密操作将无法进行。注意,当对数据库进行透明加解密,以及更改密钥等操作时,将无法执行诸如从数据库文件组中删除文件,删除数据库,使数据库脱机,分离数据库,将数据库文件组转换成只读状态等操作。一旦启用了透明加密功能,SQL Server会将日志中的文本数据清理出去,并使用加密格式的日志文件。不管在任何数据库上执行了透明加密,SQL Server自带的tempdb数据库都会自动进行加密,这将导致其非加密数据库性能的下降。当传送日志文件到另外的使用透明加密的数据库时,如果相关日志在另外的数据库上不可用,日志传送将无法进行。使用了透明加密功能,将导致数据库的额压缩备份效率降低。

猜你喜欢
解密日志备份
“备份”25年:邓清明圆梦
VSAT卫星通信备份技术研究
一名老党员的工作日志
炫词解密
解密“一包三改”
扶贫日志
创建vSphere 备份任务
炫词解密
雅皮的心情日志
游学日志