SQL Server中的加密簡介
在SQL Server2000和以前的版本,是不支持加密的。所有的加密操作都需要在程序中完成。這導致一個問題,資料庫中加密的數據僅僅是對某一特定程序有意義,而另外的程序如果沒有對應的解密演算法,則數據變得毫無意義。
到了SQL Server2005,引入了列級加密。使得加密可以對特定列執行,這個過程涉及4對加密和解密的內置函數
SQL Server 2008時代,則引入的了透明數據加密(TDE),所謂的透明數據加密,就是加密在資料庫中進行,但從程序的角度來看就好像沒有加密一樣,和列級加密不同的是,TDE加密的級別是整個資料庫。使用TDE加密的資料庫文件或備份在另一個沒有證書的實例上是不能附加或恢復的。
㈡ 請問SQL怎麼對數據進行加密
--以下代碼包括創建密鑰,加密,解密和刪除密鑰
/*
1.利用對稱密鑰
搭配EncryptByKey進行數據加密
使用DecryptByKey函數進行解密
這種方式比較適合大數據量
*/
='XIAOMA'
='ZXCCERTIFICATE',EXPIRY_DATE='2015/01/01'
CREATESYMMETRICKEYSYM_TOMWITHALGORITHM=
OPENSYMMETRICKEYSYM_
SELECTCONVERT(NVARCHAR(10),Decryptbykey((Encryptbykey(Key_guid('SYM_TOM'),N'TOM3'))))
CLOSESYMMETRICKEYSYM_TOM
DROPSYMMETRICKEYSYM_TOM
DROPCERTIFICATETOMCERT;
DROPMASTERKEY;
--或--
=AES_256ENCRYPTIONBYPASSWORD='ZXC123456'
='ZXC123456'
SELECTCONVERT(VARCHAR(10),Decryptbykey(Encryptbykey(Key_guid('ZXC'),'YHDH_C')))
CLOSESYMMETRICKEYZXC;
DROPSYMMETRICKEYZXC;
/*
2.利用非對稱密鑰
搭配EncryptByAsymKey進行數據加密
使用DecryptByAsymKey函數進行解密
用於更高安全級別的加解密數據
*/
='XIAOMA'
=RSA_2048ENCRYPTIONBYPASSWORD='ZXC123456'
(DECRYPTIONBYPASSWORD='ZXC123456')
SELECTCONVERT(VARCHAR(100),Decryptbyasymkey(Asymkey_id('ABC'),Encryptbyasymkey(Asymkey_id('ABC'),'ZXC123456')))
DROPASYMMETRICKEYABC;
DROPMASTERKEY
/*
3.利用憑證的方式
搭配EncryptByCert進行加密
DecryptByCert函數進行解密
比較類似非對稱密鑰
*/
='XIAOMA'
='ZXCCERTIFICATE',EXPIRY_DATE='2015/01/01'
SELECTCONVERT(VARCHAR(20),Decryptbycert(Cert_id('ZXC'),Encryptbycert(Cert_id('ZXC'),'123456')))
DROPCERTIFICATEZXC;
DROPMASTERKEY
--或--
='Mary5',
SECRET='123456';
ALTERLOGINUser1
ADDCREDENTIALAlterEgo
DropCREDENTIALAlterEgo
DROPCREDENTIALAlterEgo
/*
4.利用密碼短語方式
搭配EncryptBypassPhrase進行加密
使用DecryptByPassPhrase函數來解密
比較適合一般的數據加解密
*/
SELECTCONVERT(VARCHAR(100),Decryptbypassphrase('xiaoma',Encryptbypassphrase('xiaoma','123456')))
㈢ sql怎麼自動備份並將備份文件加密
SQL SERVER 定時自動備份,並將備份文件加密壓縮(2008-11-12 11:21:48)標簽:it 分類:操作系統@資料庫
最近因為公司要升級HR系統,我被安排管理這個項目,公司為了安全起見和我簽署了保密協議,按了手印責任就大了,所以要想辦法加強系統、應用、資料庫的安全,系統無法控制,應用的安全還不錯,所以我就著手做資料庫的安全,資料庫用戶及密碼都控制了,現在需要對自動備份的數據文件進行加密,以下就是我使用到的工具、方法和代碼共享出來,供大家參考。
第一個步驟:就是讓SQL Server自動備份資料庫,通過DB維護計劃完成,這個我就不詳細說了。
第二個步驟:就是加密並壓縮備份的資料庫文件。為了在備份後,馬上進行壓縮,最方便的就是直接使用SQL命令執行壓縮,由於WinRAR可以通過命令行調用,所以我們可以使用SQL Server中的xp_cmdshell命令來執行壓縮指令,同時通過其中的一些參數指定壓縮密碼,這樣加密壓縮就實現了。(為了實現此功能,伺服器上要安裝WinRAR)
第三步驟:修改維護計劃里調用的SQL,在命令中輸入執行備份、加密、刪除備份的文件的存儲過程。
實施步驟和代碼:
1、在備份的資料庫中建立存儲過程
CREATE procere hrp_backup
--alter procere hrp_backup
WITH ENCRYPTION
AS
declare
@prefix nvarchar(100),
@datefile nvarchar(100),
@bakfile nvarchar(100),
@rarfile nvarchar(100),
@delcmd nvarchar(100),
@rarcmd nvarchar(150)
set @prefix='D:/Database_bak/' --備份文件夾
set @datefile='HRM8_DBBAK_'+cast(Year(GetDate()) as varchar(4))+cast(Month(GetDate()) as varchar(2))+cast(Day(GetDate()) as varchar(2))
set @bakfile=@prefix+@datefile+'.bak'
set @rarfile=@prefix+''+@datefile+'.rar'
BACKUP DataBASE HRM8 TO DISK = @bakfile WITH INIT , NOUNLOAD , NAME = N'HR數據備份', NOSKIP , STATS = 10, NOFORMAT
--set @delcmd = 'del '+@prefix+ 'RAR/*.rar' --先清空RAR備份文件夾
set @rarcmd ='C:/Progra~1/WinRAR/WinRAR.exe a -ppassword -df -ep1 '+@rarfile+' '+@bakfile
-- -df壓縮後刪除文件 -ep1 從名稱中排除基本目錄
--將password改為您要設置的密碼,進行加密壓縮
--exec master..xp_cmdshell @delcmd
exec master..xp_cmdshell @rarcmd
Go
2、新建維護計劃,在Transact-SQL命令中執行以上的存儲過程。
exec hrp_backup
go
驗證調試成功。
㈣ SQL數據文件怎麼加密
首先要說明不能限制 「誰」,只能限制部分人
其次是加密數據肯定要降低效率
一般情況你數據表中數據不用全部加密,某些關鍵欄位加密就行了
但是你這個只能用可逆轉加密,而且加密後 查詢檢索會麻煩些
不能直接復制,使用 Blob 欄位就類型就行了
要加密簡單點用 Base64編碼好了,也不能直接復制,肉眼看不出來,拿走也不能直接用
其它的加密方式 效果好些,但效率就低了。
㈤ SQL Server 中加密數據須知
日前 有多條新聞提到了有人可以從外部訪問資料庫——通常是應該受到保護的商業解決方案——發現資料庫中的敏感信息 例如用戶姓名 密碼 信用卡號或者地址都是以明文存儲的 這種事情已經太多了 因此 大多數人創建資料庫驅動的解決方案的第一條設計決策就是如何加密存儲數據 以便於保證它的安全 免受窺探
SQL Server 中有哪一種支持可以用於加密對象和數據?從一開始就討論一下SQL Server 欠缺什麼是明智的 或者是對於SQL Server中的加密部分你不應該做什麼
首先 SQL Server有兩個內置的密碼函數——即 pwdencrypt() 和 pwdpare() 同時 還有兩個SQL Server用來管理密碼哈希的沒有正式記錄的函數:pwdencrypt() 將密碼哈希過後進行存儲;pwdpare()將提供的字元串與哈希後的字元串進行比較 不幸的是 這個哈希函數不是非常安全 它可以通過字典攻擊演算法被破解(類似命令行應用程序!)
這些函數隨著SQL Server的版本發展而不斷進行修改 這也是另一個沒有使用它們的原因 早期版本的SQL Server對密碼進行的哈希 在後來的版本中無法解密 所以如果你依賴一個版本中的函數 那麼當升級的時候 所有你的加密數據就都沒有用了 除非你可以首先對其解密——這也就違背了加密的最初的目的
第二 你可能會嘗試去創建一個針對你的資料庫的自製的加密解決方案 但是有以下三個理由說明你不要這樣做:
除非你是加密專家 否則胡亂編寫的加密系統只會提供非常低級的價值不高的保護 新鮮的是 單向密碼哈希或者 ROTx 形式的加密幾乎不需要費事就可以被輕松打敗
如果由於你自己的能力的缺乏而導致加密被破解 那麼你的數據就完蛋了 你需要將所有的東西進行沒有加密的備份 是嗎?(即使你加密了 那裡有沒有安全漏洞?)
當市面上提供有專業級別的 具有工業強度的加密解決方案的時候 你就不值大罩得花費時間去自己做 把你的時間用於構建一個好的 堅固的資料庫 而不是再重新發明一次車滾春鬧輪
那麼 什麼才是好的加密數據的方式呢?
對於新手 微軟提供了一個自己生成的加密解決方案 CryptoAPI 對於輕量級的加密 軍用級別的安全就不在考慮范圍之內 它具有森豎相對容易實現的優勢:管理員可以安裝一個名為CAPI 的ActiveX 控制 它可以在T SQL存儲過程中提供CryptoAPI 功能 CAPI 支持各種類型的雙向加密和單向哈希演算法 所以管理員可以挑選最適合應用程序的問題的部分
如果你對使用微軟的解決方案不感興趣 還有一些很好的第三方的方案可以使用 一家名為ActiveCrypt 的軟體有限責任公司製造了XP_CRYPT 它是SQL Server的插件 可以在視圖 程序和觸發器中通過擴展存儲過程和用戶自定義函數(在SQL Server 中)來完成加密 你可以下載一個支持無線的MD DES 以及SHA 哈希的免費版本的應用程序;其他的加密模型就是在比特深度上進行的 (完全版本是無限的 )在你自己的代碼中 你可以使用XP_CRYPT 與ActiveX 控制一樣(在受限的免費版本中) 對於ASP程序員來說 一個名為AspEncrypt 的組件提供了一種將高級加密整合到你的代碼中的簡單方式
lishixin/Article/program/SQLServer/201311/22489
㈥ sql server中怎麼給資料庫表中的用戶密碼加密
在SQl2005下自帶的函數hashbytes()
,此函數是微軟在SQL
SERVER
2005中提供的,可以用來計算一個字元串的
MD5
和
SHA1
值,使用方法如下:
--獲取123456的MD5加密串
select
hashbytes('MD5',
'123456')
;
--獲取123456的SHA1加密串
select
hashbytes('SHA1',
'123456')
;有了這個函數可以在sqlserver中為字元串進行加密,但是hashbytes()
函數的返回結果是
varbinary類型,(以
0x
開頭
16
進制形式的二進制數據)通常情況下,我們需要的都是字元串型的數據,很多人首先想到的可能就是用
CAST
或
Convert
函數將varbinary
轉換為
varchar,但這樣轉換後的結果會是亂碼,正確轉換
varbinary
可變長度二進制型數據到
16
進制字元串應該使用系統內置函數
sys.fn_varbintohexstr()(只在sqlserver2005下有),如下所示:select
sys.fn_varbintohexstr(hashbytes('MD5',
'123456'))
然後就可以截取需要的部分select
lower(right(sys.fn_varbintohexstr(hashbytes('MD5','123456')),32))為md5加密串。
㈦ sql server中怎麼給資料庫表中的用戶密碼加密
1、首先我們電腦上要安裝有SQL Server,然後要准備一個MDF資料庫文件。打開SQL Server。
㈧ SQL如何加密
對MSSQL的用戶信息有興趣的,可能會發現master.dbo.sysxlogins裡面存放著用戶的口令,可是呢,password欄位如果不是null就是一堆看不懂的binary,這個口令是怎麼加密的呢?
其實只要仔細看看master.dbo.sp_addlogin就知道了,MSSQL的sp都可以看到代碼,真是不錯。
讓我們來看看它是怎麼做的,注意這一行select @passwd = pwdencrypt(@passwd),這個時後@passwd就被加密了,讓我們也來試一下
DECLARE @ClearPWD varchar(255)
DECLARE @EncryptedPWD varbinary(255)
SELECT @ClearPWD = 'test'
SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))
SELECT @EncryptedPWD
看上去不錯,確實被加密了,可是我怎麼還原呢?
呵呵,這就沒戲了,口令加密都是單向的,用加密後的密文來比較就可以了。
繼續看看其它用戶相關的sp,可以發現master.dbo.sp_password裡面有口令比較的內容。
pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END))
不用去理會xstatus,這是一個狀態掩碼,一般我們用的時候就直接用0就可以了
DECLARE @ClearPWD varchar(255)
DECLARE @EncryptedPWD varbinary(255)
SELECT @ClearPWD = 'test'
SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))
SELECT pwdcompare(@ClearPWD, @EncryptedPWD, 0)
SELECT pwdcompare('ErrorPassword', @EncryptedPWD, 0)
這樣我們就可以使用這兩個函數來加密自己的密碼了