SQL Server 2005单元级加密和SQL Server 2008 透明数据加密

SQL Server 2005 引入了在自身的数据库引擎中加密的功能。通过使用被数据库所管理的内部证书或密钥结构,这能够被用于加密和解密任意的数据。而不需要借助外部的证书或密钥来执行。

SQL Server 提供了内置的容易的加密和解密数据的功能,是通过证书、不对称密钥或对称密钥来实现的。管理了内部所有的证书存储。这些存储使用了分层次的加密,安全证书和密钥在一个级别层次之上。这些SQL Server 2005 的特性被称之为Secret Storage。

通过内部API实现的最快的加密模式是堆成密钥加密。这种模式适合处理大量的数据。对称加密密钥通过X509.v3证书被加密存储。

SQL Server 2005 支持一些对称加密的算法。这些算法在Windows Crypto API中被执行。

在数据库连接区域中,SQL Server 2005 能够保持多种开放式对称密钥。通过“解开”,密钥 被从存储中重新得到,并被准备好了用于加密数据。当一部分数据被加密时,不需要指定使用对称密钥,取而代之的是,如果当前密钥被解密和解开了,这些加密字节引擎自动流向解开的对称密钥。这个密钥被用于解密和还原数据。如果当前密钥是不解开的,则返回值为空。

“解开”密钥的能力需要直接访问密钥上的访问控制列表ACL。

给予SQL Server 2005 这种加密机制的支持,有以下几种方法。

1. 为每个特定的在数据库中被用于标记数据的表建立一个对称密钥。

2. 通过相应的密钥在标签单元中加密数据。

3. 通过被解开用户标签的映射标签的密钥来控制访问密钥。提供了简单的在建立连接时解开所有密钥的方法。

4. 使用在基本表上的视图,包括在SELECT语句中调用加密API来定义这个视图。

以下有一个简单的例子来显示如何定义这个视图。

CREATE VIEW MyTable 
AS 
SELECT ID, 
DecryptByKey(SensitiveData), 
DecryptByKey(OtherSensitiveData), 
NonSensitiveData, 
FROM BaseTable 
GO 

给出了这种方法,让我们看看在用户选择了这个视图时发生了什么。被映射到标签的用户能够访问的所有密钥都被解开了。因此,带有标签的所有单元在SELECT 语句被执行的时候都将会被解密。相反地,被映射到标签的用户不能够访问的所有密钥将不会被解开。当SELECT语句被执行的时候,带有这些标签的单元返回空值,不会为用户提供任何在单元中的数据信息。 这种方法完成了细节,动态控制了我们查询的相关表中的数据。具体参见http://www.microsoft.com/china/technet/prodtechnol/sql/2005/sql2005cls.mspx

SQL Server 2008中的透明数据加密(TDE),可以选择同SQL Server 2005中一样使用单元级的加密,或者是使用TDE进行完全数据库级加密、或者是由Windows提供的文件级加密。它旨在为整个数据库提供静态保护而不影响现有的应用程序。对数据库进行加密,传统上都会涉及复杂的应用程序改动,例如修改表schemas、删除函数和明显的性能下降。

透明数据加密可以为加密数据提供更高的灵活性,因为对其而言加密是数据库的一个属性,而非仅仅是代码行中的函数结果。这样在数据级执行加密时,管理员就无需对其数据库结构和应用程序代码进行大量的改动。下面的代码显示的是如何使用透明数据加密方法来加密数据库。

USE master;
 GO 
--Create a master key
 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';
 GO 
--Create a certificate to use with TDE
 CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'
 GO 
--Change to the database to encrypt
 USE AdventureWorks
 GO 
--Create your database master key
 CREATE DATABASE ENCRYPTION KEY
 WITH ALGORITHM = AES_128 --Use a strong algorithm
 ENCRYPTION BY SERVER CERTIFICATE TDECERT
 GO 
--Alter the database to encrypt it with the
 --master database key
 ALTER DATABASE AdventureWorks
 SET ENCRYPTION ON
 GO

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏c#开发者

使用.net和x509证书实现安全

使用.net和x509证书实现安全 概述 主要针对目前xxx数据交换平台实现安全数据交换的设计方案;本方案通过PKI技术实现对报文加密,加签和证书的管理实...

3488
来自专栏架构师之旅

https连接的前几毫秒发生了什么

在讨论这个话题之前,先提几个问题: 为什么说https是安全的,安全在哪里? https是使用了证书保证它的安全的么? 为什么证书需要购买? 我们先来看http...

2826
来自专栏Golang语言社区

Golang语言--中AES加密详解

golang标准库中对于aes加密的阐述得非常简洁,如果没有一定的密码学基础知识,是很容易迷惑的。 本文将完整地介绍aes加密的基本知识,并分析网络上常见的调...

5128
来自专栏向治洪

Android通信安全之HTTPS

Https HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HT...

4129
来自专栏腾讯云数据库团队的专栏

MariaDB 加密特性及使用方法

MariaDB在10.1.3版本中加入了支持表加密和表空间加密的特性,在10.1.7版本加入了支持binlog加密的特性,这使得我们可以对数据文件和binlog...

4.7K0
来自专栏分布式系统和大数据处理

.Net中的加密解密

在一些比较重要的应用场景中,通过网络传递数据需要进行加密以保证安全。本文将简单地介绍了加密解密的一些概念,以及相关的数字签名、证书,最后介绍了如何在.NET中对...

1404
来自专栏向治洪

iOS使用自签名证书实现HTTPS请求

概述 在16年的WWDC中,Apple已表示将从2017年1月1日起,所有新提交的App必须强制性应用HTTPS协议来进行网络请求。 默认情况下非HTTPS的网...

24310
来自专栏拂晓风起

actionscript AES 加密 解密

1232
来自专栏owent

ECDH椭圆双曲线(比DH快10倍的密钥交换)算法简介和封装

前面有几篇blog就提到我有计划支持使用ECDH密钥交换。近期也是抽空把以前的DH密钥交换跨平台适配从atgateway抽离出来,而后接入了ECDH流程。

3213
来自专栏FreeBuf

Android数据存储安全实践

Android操作系统自问世以来凭借其开放性和易用性成为当前智能手机的主流操作系统之一,作为与人们关系最密切的智能设备,越来越多的通讯录、短信、视频等隐私数据以...

1553

扫码关注云+社区

领取腾讯云代金券