杯中水

导航

 

SQLServer中的数据进行加密,有三种方法,

1、  在程序语言中先对数据进行加密后再把加密后的数据保存在SQLServer数据库中;

2、  利用SQLServer未公开的加密密码函数,在SQL代码中调用加密密码函数对数据进行加密后保存;

3、  编写扩展存储过程的外部DLL文件实现加密,然后由SQL代码调用加密功能实现数据加密。

 

第一种方法就不再描述,利用第二种方法加密数据代码示例:

create table #temptable(iorder int, pswd varbinary(1024) )

go

insert into #temptable values(1, pwdencrypt('yang'))

insert into #temptable values(2, pwdencrypt('lian'))

insert into #temptable values(3, pwdencrypt('shan'))

go

select * from #temptable

go

-- 比较数据是否相等

select * from #temptable

where pwdcompare('lian', pswd)=1

go

drop table #temptable

go

 

上面的语句中,用到了二个函数:pwdencryptpwdcompare,这是二个SQLServer未公开的函数,pwdencrypt实现对输入数据进行加密后返回二进制形式的加密内容,而pwdcompare用于检查明文是否与加密的二进制数据内容相等,没有解密函数。这二个函数主要是用于SQLServer内部自己调用。优点是调用方便,缺点是这二个函数没有公开,就意味着可能改变,并且不兼容原来的,在使用上存在风险。

 

第三种方法,利用SQL Server中的一个扩展存储过程,名叫sp_addextendedproc,向 Microsoft SQL Server 注册新扩展存储过程的名称。语法为:sp_addextendedproc [@functname=] 'procedure' , [@dllname=] 'dll'。它的功能是把已经写好在外部DLL文件中的函数引入到SQLServer中,提供给其它SQL代码调用。其用法示例为:

USE master

GO

EXEC sp_addextendedproc 'xp_hello', 'c:/xp_hello.dll'

上面的语句表示把外部DLL文件 c:/xp_hello.dll 中的函数 xp_hello 引入到SQLServer中,在执行完上面的语句后,主库中就多了一个名为 xp_hello的扩展存储过程,我们在其它脚本中就可以调用此扩展存储过程了。有一点限定的是,sp_addextendedproc只能在master中执行,如果在其它库中调用xp_hello,需要加上master限定库名。

 

posted on 2013-12-25 13:35  杯中水_F  阅读(9407)  评论(0编辑  收藏  举报