對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
上面的語句中,用到了二個函數:pwdencrypt和pwdcompare,這是二個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限定庫名。