当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 怎样在SQL Server 2005中用证书加密数据

MSSQL
将表数据生成SQL脚本的存储过程和工具
初学者必读:经典的数据库记录分页代码
使用SQL Server 2008管理非结构化数据
利用索引提高SQL Server数据处理的效率
SQL Server数据库内存会不断增加的问题分析
面向对象设计过程中必须遵守的相关准则
SQL Server 2005如何设置多字段做关键字
SQL Server 2005数据库中表的递归查询
SQL Server中使用DTS设计器进行数据转移
在查询分析器理启动或停止SQL Agent服务
教你快速掌握SQL语言中游标的使用技巧
将SQL Server中所有表的列信息显示出来
使用SQL语句快速获取SQL Server数据字典
Sql Server 2005中的架构用户登录和角色
如何保存数据库连接参数代码及步骤详解
如何使用SQL Server数据库嵌套子查询
SQL Server从安装到建库为新手寻找捷径
课程讲解 如何使用SQL Server校勘功能
数据库理论:学习基于SQL数据库的算法
教你使用SQL Server数据库进行网络链接

MSSQL 中的 怎样在SQL Server 2005中用证书加密数据


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 154 ::
收藏到网摘: n/a

提到SQL Server 2005证书,很多人可能以为它只是用来在传输数据的时候起到加密作用的,但在深入了解后,你会发现它的用处还有很多。
在MySQL数据库中,encode和decode函数可以通过自己设定的密钥来加密数据库的表的某些列来达到数据安全的目的。在SQL Server 2005中同样可以用证书来将其实现。下文中将介绍如何来进行实现:

--创建主密钥

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'fengjicai'

--用密码fengjicai创建证书boyi

CREATE CERTIFICATE boyi

ENCRYPTION BY PASSWORD = 'fengjicai'

WITH SUBJECT = 'boyi55 test certificate',

start_date='02/08/2008',

EXPIRY_DATE = '02/08/2009';

GO

--建测试表,name字段为要加密的列,数据类型要为varbinary

--因为加密后的数据是二进制数据

create table testB(id int identity(1,1),name varbinary(5000))

--向测试表中写入一条测试数据

insert into testB(name)

select encryptbycert(cert_id('boyi'),'boyi55')

/*

附:encryptbycert函数用法


EncryptByCert ( certificate_ID , { 'cleartext' | @cleartext } )

certificate_ID

数据库中证书的 ID。


cleartext

将使用证书进行加密的数据字符串。


@cleartext

类型为 nvarchar、char、wchar、varchar 或 nchar 的变量,其中包含将使用证书的公钥进行加密的数据。

返回类型

Varbinary,最大大小为 8000 个字节。

*/

--提取加密后数据

SELECT id, cast(DecryptByCert(Cert_Id('boyi'),

name, N'fengjicai')as varchar(20)) from testb

/*

说明:decryptbycert函数的返回类型为varbinary,所以要将二进制转化为原始类型。

name为字段名,此处也必须是二进制类型。如果不是要做相应转换。

附:decryptbycert函数用法

DecryptByCert (

certificate_ID ,

{ 'ciphertext' | @ciphertext }

[ , { 'cert_password' | @cert_password } ]

)

certificate_ID

数据库中的证书的 ID。

ciphertext

已用证书的公钥加密的数据的字符串。

@ciphertext

类型为 varbinary 的变量,其中包含已用证书加密的数据。

cert_password

用来加密证书私钥的密码。必须为 Unicode 字符。

@cert_password

包含密码的变量,该密码用来加密证书的私钥。必须为 Unicode 字符。

*/

总结:

这个加密是比较安全的,而且每次加密后的二进制数据也并不相同。唯一的缺点是会消耗大量的资源,不适合在大数据量的环境下的部署。另外加密后的数据量相对较大,如果是加密内容过多的话,数据库的增长将会愈加明显。