實(shí)例講解SQL Server加密功能
SQL Server中加密是層級(jí)的,每一個(gè)上層為下提供保護(hù)。如圖:

實(shí)例:
/**
SMK(Service Master Key)在SQL Server安裝時(shí)生成,由Windows DPAPI(Data Protection API)提供保護(hù)
**/
/**創(chuàng)建數(shù)據(jù)庫(kù)級(jí)別DMK(Database Master Key),受SMK保護(hù)**/
create master key encryption by password=N'Passw0rd'
go
/**數(shù)據(jù)庫(kù)內(nèi)的加密對(duì)象受DMK保護(hù)
支持的對(duì)稱加密算法:DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128| DESX | AES_128 | AES_192 | AES_256
非對(duì)稱加密算法:RSA_512 | RSA_1024 | RSA_2048
注意避免使用RC,DESX類算法,2014之后會(huì)刪除此功能
**/
--1.創(chuàng)建非對(duì)稱密鑰.
create asymmetric key asyc_key_enc with algorithm=RSA_1024 encryption by password=N'Pass@word' go
--2.創(chuàng)建對(duì)稱密鑰.
create symmetric key symc_key_enc with algorithm=Triple_DES encryption by password=N'Pass@word' go
--3.創(chuàng)建證書.證書也可被其它方式保護(hù)
create certificate cert_ENC with subject='certificate for ENC',expiry_date='20990101' go
--4.對(duì)稱密鑰可由以上三種方式提供加密保護(hù)
--4.1 由非對(duì)稱密鑰加密
create symmetric key symc_key_enc_byAsyc with algorithm=AES_128 encryption by asymmetric key asyc_key_enc go
--4.2 由對(duì)稱密鑰加密
open symmetric key symc_key_enc decryption by password=N' Pass@word'; create symmetric key symc_key_enc_bySymc with algorithm = DES encryption by symmetric key symc_key_enc go
--4.3 由證書加密
create symmetric key symc_key_enc_byCert with algorithm =AES_128 encryption by certificate cert_ENC go
/**列級(jí)數(shù)據(jù)加密和解密.MSSQL提供以下4對(duì)加密/解密函數(shù)對(duì)列數(shù)據(jù)加密
EncryptByCert() 和DecryptByCert()—利用證書對(duì)數(shù)據(jù)進(jìn)行加密和解密
EncryptByAsymKey() and DecryptByAsymKey()—利用非對(duì)稱密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密
EncryptByKey() and DecryptByKey()—利用對(duì)稱密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密
EncryptByPassphrase() and DecryptByPassphrase()—利用密碼字段產(chǎn)生對(duì)稱密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密
注意:被加密和解密的數(shù)據(jù),必需是varbinary類型
**/
--以ENCRYPTBYKEY為例,其它的大同小異
--對(duì)***號(hào)IDN進(jìn)行加密和解密
create table tb(IDN int,Name varchar(20)); insert into tb values (123456789,'BigBrother'),(090807001,'SpiderMan'),(336655789,'SuperMan') go
--新增列Ency_IDN存儲(chǔ)加密數(shù)據(jù),使用之前由非對(duì)稱密鑰加密的對(duì)稱密鑰symc_key_enc_byAsyc來(lái)加密數(shù)據(jù)
alter table tb add Ency_IDN varbinary(128);
go
open symmetric key symc_key_enc_byAsyc
decryption by asymmetric key asyc_key_enc
with password=N'
Pass@word';
update tb
set Ency_IDN=ENCRYPTBYKEY(KEY_GUID('symc_key_enc_byAsyc'),CONVERT(Varbinary,IDN));--加密前要轉(zhuǎn)成varbinary
close symmetric key symc_key_enc_byAsyc --顯式關(guān)閉對(duì)稱密鑰
go
--解密被加密的列數(shù)據(jù)
open symmetric key symc_key_enc_byAsyc decryption by asymmetric key asyc_key_enc with password=N' Pass@word'; select IDN,Ency_IDN,convert(int,DECRYPTBYKEY(Ency_IDN))as Decr_IDN from tb; close symmetric key symc_key_enc_byAsyc --顯式關(guān)閉對(duì)稱密鑰 go 1 <br>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
- MSSQL數(shù)據(jù)加密解密代碼
- SQL Server儲(chǔ)過(guò)程加密和解密原理深入分析
- MySQL加密和解密實(shí)例詳解
- MySQL數(shù)據(jù)庫(kù)對(duì)敏感數(shù)據(jù)加密及解密的實(shí)現(xiàn)方式
- MySQL InnoDB表空間加密示例詳解
- 關(guān)于SQL Server加密與解密的問(wèn)題
- sqlserver數(shù)據(jù)庫(kù)加密后無(wú)法使用MDF,LDF,log文件名稱被修改的數(shù)據(jù)恢復(fù)
- MySQL中使用MD5加密的實(shí)現(xiàn)
- mysql如何對(duì)已經(jīng)加密的字段進(jìn)行模糊查詢?cè)斀?/a>
- Sql Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)表中字段的列加密
相關(guān)文章
SQL查詢某列指定長(zhǎng)度的字符串多余的用省略號(hào)來(lái)表示
有時(shí)候?yàn)榱嗣烙^,只需要顯示前面幾個(gè)字符串,剩下的可以用省略號(hào)來(lái)表示,下面有個(gè)不錯(cuò)的示例,感興趣的朋友可以參考下2013-11-11
SQLSERVER不拼接SQL如何實(shí)現(xiàn)條件查詢
在做項(xiàng)目中,我們經(jīng)常遇到復(fù)雜的查詢方法,本文主要介紹了SQLSERVER不拼接SQL如何實(shí)現(xiàn)條件查詢,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法
這篇文章主要為大家詳細(xì)介紹了SQL Server數(shù)據(jù)類型轉(zhuǎn)換方法,感興趣的小伙伴們可以參考一下2016-03-03
SQL Server 2005附加數(shù)據(jù)庫(kù)時(shí)Read-Only錯(cuò)誤的解決方案
本文我們主要介紹了SQL Server 2005附加數(shù)據(jù)庫(kù)時(shí)提示Read-Only錯(cuò)誤的解決方案,需要的朋友可以參考下2015-08-08
深入SQL截取字符串(substring與patindex)的詳解
本篇文章是對(duì)SQL截取字符串(substring與patindex的使用)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
SQL Server中Check約束的學(xué)習(xí)教程
這篇文章主要介紹了SQL Server中Check約束的學(xué)習(xí)教程,包括對(duì)啟用Check約束來(lái)提升性能的介紹,需要的朋友可以參考下2015-12-12
navicat導(dǎo)入sql數(shù)據(jù)庫(kù)文件的簡(jiǎn)單實(shí)現(xiàn)
在很多項(xiàng)目當(dāng)中都有sql文件導(dǎo)入到MySQL數(shù)據(jù)庫(kù)的需要,因?yàn)橛衧ql數(shù)據(jù)庫(kù)文件,這個(gè)項(xiàng)目才能正常運(yùn)行起來(lái),本文主要介紹了navicat導(dǎo)入sql數(shù)據(jù)庫(kù)文件的簡(jiǎn)單實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11

