SQLServer中數據加密方法

SQLServer中的數據進行加密,有三種方法,數據庫

一、  在程序語言中先對數據進行加密後再把加密後的數據保存在SQLServer數據庫中;函數

二、  利用SQLServer未公開的加密密碼函數,在SQL代碼中調用加密密碼函數對數據進行加密後保存;加密

三、  編寫擴展存儲過程的外部DLL文件實現加密,而後由SQL代碼調用加密功能實現數據加密。spa

 

第一種方法就再也不描述,利用第二種方法加密數據代碼示例:io

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

goast

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

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

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限定庫名。

相關文章
相關標籤/搜索