程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQLSERVER加密解密函數(非對稱密鑰 證書加密 對稱密鑰)應用辦法代碼

SQLSERVER加密解密函數(非對稱密鑰 證書加密 對稱密鑰)應用辦法代碼

編輯:MSSQL

SQLSERVER加密解密函數(非對稱密鑰 證書加密 對稱密鑰)應用辦法代碼。本站提示廣大學習愛好者:(SQLSERVER加密解密函數(非對稱密鑰 證書加密 對稱密鑰)應用辦法代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLSERVER加密解密函數(非對稱密鑰 證書加密 對稱密鑰)應用辦法代碼正文


ENCRYPTBYASYMKEY() --非對稱密鑰
ENCRYPTBYCERT()   --證書加密
ENCRYPTBYKEY()   --對稱密鑰
ENCRYPTBYPASSPHRASE()  --通行短語(PassPhrase)加密


--SQLSERVER中的加密函數 2013-7-11
ENCRYPTBYASYMKEY() --非對稱密鑰
ENCRYPTBYCERT()   --證書加密
ENCRYPTBYKEY()   --對稱密鑰
ENCRYPTBYPASSPHRASE()  --通行短語(PassPhrase)加密


---------------------------------------------------------------------------------------
--非對稱密鑰包括數據庫級的外部公鑰和私鑰,它可以用來加密息爭密SQL Server數據庫中的數據,
--它可以從內部文件或法式集中導入,也能夠在SQL Server數據庫中生成。它不像證書,弗成以備份到文件。
--這意味著一旦在SQL Server中創立了它,沒有異常簡略的辦法在其他用戶數據庫中重用雷同的密鑰。
--非對稱密鑰關於數據庫加密屬於高平安選項,因此須要更多的SQL Server資本。
--我們看一組例子:

--示例1、創立非對稱密鑰
--
--創立非對稱密鑰應用以下敕令:

--CREATE ASYMMETRIC KEY 

 

--以下語句創立一個非對稱密鑰asymDemoKey

use [pratice]
go

CREATE ASYMMETRIC KEY asymDemoKey --創立非對稱密鑰稱號
WITH ALGORITHM = RSA_512 --加密平安類型
ENCRYPTION BY PASSWORD = '123!' --暗碼

--示例2、檢查以後數據庫中的非對稱密鑰

--應用目次視圖sys.asymmetric_keys(http://msdn.microsoft.com/en-us/library/ms188399.aspx)來檢查。


--檢查以後數據庫中的非對稱密鑰
USE [pratice]
go

SELECT name, algorithm_desc, pvt_key_encryption_type_desc
FROM sys.asymmetric_keys


--示例3、修正非對稱密鑰的私鑰暗碼

--你可使用帶有ENCRYPTION BY PASSWORD和DECRYPTION BY PASSWORD選項的
--ALTER ASYMMETRIC KEY(http://technet.microsoft.com/en-us/library/ms189440.aspx)修正私鑰的暗碼


--修正私鑰暗碼
ALTER ASYMMETRIC KEY asymDemoKey--要修正的密鑰稱號
WITH PRIVATE KEY --私鑰
(ENCRYPTION BY PASSWORD = '456',--指定新暗碼
DECRYPTION BY PASSWORD = '123!')--舊暗碼是用來解密的


--示例4、應用非對稱密鑰對數據停止加密息爭密。
--
--因為同時須要公鑰和密鑰,在保護保密數據時應用非對稱密鑰來加密數據長短常平安的方法。
--但同時用於年夜數據集時將消費更多的資本。
--
--不推舉應用非對稱密鑰對數據加密,但它依然是一個選擇。一旦將非對稱密鑰加到數據庫,便可以用來加密息爭密數據。
--
--用到以下兩個sql函數:
--
--EncryptByAsymKey 加密數據。(http://technet.microsoft.com/en-us/library/ms186950.aspx)
--
--DecryptByAsymKey解密數據。(http://msdn.microsoft.com/en-us/library/ms189507.aspx)

--留意,在經由過程證書加密時,DecryptByAsymKey前往的是varbinary類型的加密數據。
--
--上面是一個例子:


use [pratice]
go

--創立須要加密的數據
Create Table BankUser
(PKID int primary key identity(1,1)
,UserNo varbinary(1000) null  --必定要用二進制數據類型
,CurState datetime   not null
)
go

insert into BankUser
(UserNo,CurState)
VALUES (EncryptByAsymKey(AsymKey_ID('asymDemoKey'),'137'),GETDATE())
--拔出一筆記錄,字段UserNo存儲了加密的號碼值
go

 

--檢查未加密的數據: 
SELECT PKID,Curstate,
cast
(DecryptByAsymKey(AsymKey_ID('asymDemoKey'),UserNo,N'123')
as varchar(1000)) as UserNo --須要原始私鑰
from BankUser

 

 

--示例5、刪除非對稱密鑰

--敕令:DROP ASYMMETRIC KEY 刪除指定的非對稱密鑰( http://msdn.microsoft.com/en-us/library/ms188389.aspx)
--
--例子:
DROP ASYMMETRIC KEY asymDemoKey

DROP TABLE [dbo].[BankUser]

--小結:
--
--1、本文重要引見非對稱密鑰的創立、刪除、檢查和用它來修正私鑰、停止數據的加密息爭密。
--
--2、非對稱密鑰包括數據庫級的外部公鑰和私鑰,它可以用來加密息爭密SQL Server數據庫中的數據。
--
--3、非對稱密鑰關於數據庫加密屬於高平安選項,因此須要更多的SQL Server資本,不推舉應用。
--
--下文將重要引見絕對簡略的而且普遍運用的對稱密鑰加密(Symmetric Key Encryption)
-----------------------------------------------------------------------------------------------------

--SQL Server 2008引入通明數據加密(Transparent Data Encryption),即TDE
--它許可你完整無需修正運用法式代碼而對全部數據庫加密。
--
--當一個用戶數據庫可用且已啟用TDE時,在寫入到磁盤時在頁級完成加密。在數據頁讀入內存時解密。
--假如數據庫文件或數據庫備份被盜,沒有效來加密的原始證書將沒法拜訪。
--這簡直是SQL Server2008平安選項中最沖動人心的功效了,有了它,我們至多可以將一些低級的歹意窺視拒之見外。
--上面的兩個例子將展現若何啟用和保護通明數據加密
--示例1、啟用通明加密(TDE)


USE Master
GO
--刪除舊主密鑰
--Drop MASTER KEY
--GO
--創立主密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='B19ACE32-AB68-4589-81AE-010E9092FC6B'
GO
--創立證書,用於通明數據加密
CREATE CERTIFICATE TDE_Server_Certificate
WITH SUBJECT = 'Server-level cert for TDE'
GO

USE [pratice]
GO
--第一步:如今開端通明加密
CREATE DATABASE ENCRYPTION KEY--創立數據庫加密密鑰
    WITH ALGORITHM = TRIPLE_DES_3KEY--加密方法
    ENCRYPTION BY SERVER CERTIFICATE TDE_Server_Certificate--應用辦事器級證書加密
GO
/*
Warning: The certificate used for encrypting the database encryption key
has not been backed up.
You should immediately back up the certificate and the private key
associated with the certificate.
If the certificate ever becomes unavailable or
if you must restore or attach the database on another server,
you must have backups of both the certificate and the private key
or you will not be able to open the database.
*/

--第二步:翻開加密開關
ALTER DATABASE [pratice] SET ENCRYPTION ON
GO

--檢查數據庫能否加密
SELECT  is_encrypted FROM    sys.databases
WHERE   name = 'pratice'

--留意:一旦在數據庫運用了加密,應當連忙備份辦事器級證書!

--沒有加密dek的證書,該數據庫將沒法翻開,附加到其余辦事器也沒法應用,數據庫文件亦不會被Hack。
--假如一個DBA想要正當地將數據庫從一個SQL Server實例挪動到另外一個SQL Server實例,
--那末她應當起首備份辦事器級證書,然後在新的SQL Server實例中創立證書。
--此時可以正當地備份、復原數據庫或附加數據及日記文件。

--示例2、治理和移除通明加密(TDE)
USE [pratice]
GO
--修正加密算法
ALTER DATABASE  ENCRYPTION KEY
REGENERATE WITH ALGORITHM = AES_128
Go

SELECT  DB_NAME(database_id) databasenm,
        CASE encryption_state
          WHEN 0 THEN 'No encryption'
          WHEN 1 THEN 'Unencrypted'
          WHEN 2 THEN 'Encryption in progress'
          WHEN 3 THEN 'Encrypted'
          WHEN 4 THEN 'Key change in progress'
          WHEN 5 THEN 'Decryption in progress'
        END encryption_state, key_algorithm, key_length
FROM    sys.dm_database_encryption_keys

/*
對一切用戶數據庫的加密處置也包括對tempdb的處置 ,由於表銜接,暫時表都要用到tempdb
databasenm encryption_state key_algorithm key_length
tempdb Encrypted AES 256
DB_Encrypt_Demo Encrypted AES 128
*/

--除更改dek的算法,我們也能夠更改用來加密數據庫的辦事器級證書(該證書應當按期更改)

USE master
GO
CREATE CERTIFICATE TDE_Server_Certificate_V2
WITH SUBJECT = 'Server-level cert for TDE V2'
GO
USE [pratice]
GO
ALTER DATABASE ENCRYPTION KEY
ENCRYPTION BY SERVER CERTIFICATE TDE_Server_Certificate_V2
--用新證書修正DEK

--移除數據庫通明加密
ALTER DATABASE [pratice]
SET ENCRYPTION OFF
GO

--移除TDE後,可以刪除DEK
USE [pratice]
GO
DROP DATABASE ENCRYPTION KEY
Go

--留意:假如刪除DEK是SQL Server實例中最初一個應用TDE的用戶界說數據庫,
--在SQL Server實例重啟後,tempdb也將變成不加密的狀況。
--
--小結:
--
--1、本文重要引見通明數據加密(TDE)的應用。
--
--2、對DEK的修正同時影響到tempdb數據庫的加密狀況。
------------------------------------------------------------------------------------------------

--SQLServer 2008中的代碼平安(七) 證書加密
--
--證書可以在數據庫中加密息爭密數據。
--證書包括密鑰對、關於證書具有者的信息、證書可用的開端和停止過時日期。
--
--證書同時包括公鑰和密鑰,前者用來加密,後者解密。SQL Server可以生成它本身的證書,
--也能夠從內部文件或法式集載入。由於可以備份然後從文件中載入它們,證書比非對稱密鑰更容易於移植,
--而非對稱密鑰卻做不到。這意味著可以在數據庫中便利地重用統一個證書。

--留意:證書和非對稱密鑰異樣的消費資本。

--我們看一組例子:
--
--示例1、創立數據庫證書

--創立數據庫證書:CREATE SYMMETRIC KEY (http://msdn.microsoft.com/en-us/library/ms187798.aspx)
USE [pratice]
GO
--創立證書
CREATE CERTIFICATE cert_Demo --證書稱號
ENCRYPTION BY PASSWORD = '123!!!' --加密證書的暗碼
WITH SUBJECT = 'DB_Encrypt_Demo Database Encryption Certificate',--證書主題
START_DATE = '3/14/2012', EXPIRY_DATE = '10/20/2016'--起止日期
GO

--示例2、檢查數據庫中的證書

--應用目次視圖sys.certificates(http://msdn.microsoft.com/en-us/library/ms189774.aspx)來檢查。

--檢查以後數據庫中的證書
USE [pratice]
go
--檢查證書
SELECT  name, pvt_key_encryption_type_desc, issuer_name
FROM    sys.certificates

--示例3、備份和復原證書

--創立證書後,也能夠應用BACKUP CERTIFICATE(http://msdn.microsoft.com/en-us/library/ms178578.aspx)
--敕令備份到文件,為了平安地保留或在其他數據庫中復原它。
--備份證書
BACKUP CERTIFICATE cert_Demo
TO FILE = 'D:\certDemo.BAK'--證書備份途徑,用來加密
WITH PRIVATE KEY (FILE='D:\certDemoPK.BAK',--證書私鑰文件途徑,用來解密
ENCRYPTION BY PASSWORD = '465!!!',--加密私鑰暗碼
DECRYPTION BY PASSWORD = '123!!!' )--解密私鑰暗碼

--備份後,可以在其他數據庫中應用這個證書,或應用DROP CERTIFICATE敕令刪除它。
DROP CERTIFICATE cert_Demo
GO
--從備份文件中復原證書到數據庫中
CREATE CERTIFICATE cert_Demo
FROM FILE = 'D:\\certDemo.BAK'
WITH PRIVATE KEY (FILE = 'D:\certDemoPK.BAK',
DECRYPTION BY PASSWORD = '456!!!' ,--解密私鑰暗碼
ENCRYPTION BY PASSWORD = '123!!!')--加密私鑰暗碼

--示例4、治理證書的私鑰

--應用ALTER CERTIFICATE( http://msdn.microsoft.com/en-us/library/ms189511.aspx)
--敕令為證書增長或刪除私鑰。
--這個敕令許可刪除私鑰(默許經由過程數據庫主密鑰加密)、增長私鑰或修正私鑰的暗碼。

--從證書中刪除私鑰
ALTER CERTIFICATE cert_Demo
REMOVE PRIVATE KEY

--從備份文件為既有證書從新增長私鑰
ALTER CERTIFICATE cert_Demo
WITH PRIVATE KEY
(FILE = 'D:\certDemoPK.BAK',
DECRYPTION BY PASSWORD = '1234GH!!!' ,--解密私鑰暗碼
ENCRYPTION BY PASSWORD = '123!!!')--加密私鑰暗碼

--修正既有私鑰的暗碼
ALTER CERTIFICATE cert_Demo
WITH PRIVATE KEY (DECRYPTION BY PASSWORD = '123!!!',
ENCRYPTION BY PASSWORD = '789!!!13E')


--示例5、應用證書加密息爭密。
--
--應用函數EncryptByCert加密數據。(http://msdn.microsoft.com/zh-cn/library/ms174361.aspx)
USE [pratice]
GO
CREATE TABLE PWDQuestion
(
  CustomerID INT ,
  PasswordHintQuestion NVARCHAR(200) ,
  PasswordHintAnswer NVARCHAR(200)
)
--拔出測試數據
INSERT  dbo.PWDQuestion ( CustomerID, PasswordHintQuestion, PasswordHintAnswer )
VALUES  ( 10, '您出身的病院稱號?', ENCRYPTBYCERT(CERT_ID('cert_Demo'), '北京四合院家中') )

--檢查密文
SELECT [PasswordHintQuestion], CAST(PasswordHintAnswer AS VARCHAR(200)) PasswordHintAnswer
FROM    dbo.PWDQuestion
WHERE   CustomerID = 10

--檢查原文
SELECT  PasswordHintQuestion,
        CAST(DECRYPTBYCERT(CERT_ID('cert_Demo'), PasswordHintAnswer,
                           N'789!!!13E') AS VARCHAR(200)) PasswordHintAnswer
FROM    dbo.PWDQuestion
WHERE   CustomerID = 10

 

--示例6、應用對稱密鑰對數據停止加密息爭密。

--在後面的文章中,你曾經看到翻開用非對稱密鑰加密的對稱密鑰的演示,
--它分兩個步調,起首用OPEN SYMMETRIC KEY敕令,然後是現實的DecryptByKey函數挪用。
--SQL Server也供給了可以或許將這兩個步調合二為一的額定的解密函數:
--DECRYPTBYKEYAUTOASYMKEY(http://msdn.microsoft.com/en-us/library/ms365420.aspx)
--和DecryptByKeyAutoCert(http://msdn.microsoft.com/en-us/library/ms182559.aspx)
USE [pratice]
GO

--本例應用數據庫主暗碼加密,因此不須要暗碼。
----Create master Key Encryption By password='123ASD!'
----go

--創立非對稱密鑰
CREATE ASYMMETRIC KEY asymDemo_V2
WITH ALGORITHM = RSA_512
--創立對稱密鑰
CREATE SYMMETRIC KEY sym_Demo_V2
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY ASYMMETRIC KEY asymDemo_V2

--翻開對稱密鑰,拔出記載
OPEN SYMMETRIC KEY sym_Demo_V2
DECRYPTION BY ASYMMETRIC KEY asymDemo_V2
INSERT  dbo.PWDQuestion ( CustomerID, PasswordHintQuestion, PasswordHintAnswer )
VALUES  ( 22, '您出身的病院稱號?', ENCRYPTBYKEY(KEY_GUID('sym_Demo_V2'), '邵逸夫病院') )
CLOSE SYMMETRIC KEY sym_Demo_V2

--此時,應用DecryptByKeyAutoAsymKey解密數據,只須要一個操作
SELECT  CAST(DECRYPTBYKEYAUTOASYMKEY(ASYMKEY_ID('asymDemo_V2'), NULL,
                                     PasswordHintAnswer) AS VARCHAR)
FROM    dbo.PWDQuestion
WHERE   CustomerID = 22

--小結:
--
--1、本文重要引見證書的創立、刪除、檢查和用它來修正加密方法、停止數據的加密息爭密。
--
--2、證書加密和非對稱密鑰加密絕對對稱密鑰加密更加消費資本。
--
--下文將重要引見SQL Server中最為使人鼓舞的通明數據加密(TDE)
-----------------------------------------------------------------------------------------
--SQL Server 2008中的代碼平安(六):對稱密鑰加密

--證書和非對稱密鑰應用數據庫級的外部公鑰加密數據,而且應用數據庫級外部私鑰解密數據。
--而對稱密鑰絕對簡略,它們包括一個同時用來加密息爭密的密鑰。
--困此,應用對稱密鑰加密數據更快,而且用在年夜數據時加倍適合。
--雖然龐雜度是斟酌應用它的身分,但它依然是一個很好的加密數據的選擇。

 

--示例1、創立對稱密鑰
--
--對稱密鑰的特征是:在數據庫會話中應用它對數據停止加密息爭密前必需起首翻開。
--
--創立對稱密鑰應用以下敕令:CREATE SYMMETRIC KEY  創立對稱密鑰。
--(http://msdn.microsoft.com/en-us/library/ms188357.aspx)

USE [pratice]
go

-- 創立一個用於加密對稱密鑰的非對稱密鑰
CREATE ASYMMETRIC KEY symDemoKey --稱號
WITH ALGORITHM = RSA_512     --加密算法
ENCRYPTION BY PASSWORD ='TestSYM456!'
--暗碼

-- 創立一個對稱密鑰
CREATE SYMMETRIC KEY sym_Demo
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY ASYMMETRIC KEY symDemoKey

--示例2、檢查以後數據庫中的對稱密鑰
--
--應用目次視圖sys.symmetric_keys(http://msdn.microsoft.com/en-us/library/ms189446.aspx)來檢查。
--檢查以後數據庫中的非對稱密鑰
USE [pratice]
go
SELECT  name, algorithm_desc
FROM    sys.symmetric_keys


--示例3、修正非對稱密鑰的加密方法
--
--你可使用ALTER SYMMETRIC KEY(http://technet.microsoft.com/en-us/library/ms189440.aspx)敕令修正
--對稱密鑰的加密方法。
--但履行前必需應用OPEN SYMMETRIC KEY(http://msdn.microsoft.com/en-us/library/ms190499.aspx)敕令翻開它。
USE [pratice]
go

--先用私鑰暗碼翻開對稱密鑰
OPEN SYMMETRIC KEY sym_Demo
DECRYPTION BY ASYMMETRIC KEY symDemoKey
WITH PASSWORD ='TestSYM456!'

--翻開以後,先增長暗碼加密,代替原密鑰
ALTER SYMMETRIC KEY sym_Demo
ADD ENCRYPTION BY PASSWORD ='newnew!456'
--再刪除非對稱密鑰加密
ALTER SYMMETRIC KEY sym_Demo
DROP ENCRYPTION BY ASYMMETRIC KEY symDemoKey
--完成操作後,封閉對稱密鑰
CLOSE SYMMETRIC KEY sym_Demo

--示例4、應用對稱密鑰對數據停止加密息爭密。
--
--1、為了應用對稱密鑰對數據停止加密,必需起首翻開它,
--然後應用函數EncryptByKey 加密數據。(http://msdn.microsoft.com/zh-cn/library/ms174361.aspx)

--2、應用DecryptByKey來解密應用對稱密鑰加密的數據。留意DecryptByKey不像EncryptByKey,
--不必應用對稱密鑰GUID。是以,為懂得密,必需翻開准確的對稱密鑰會話,不然會顯示null。
--
--上面是一個例子:
USE [pratice]
GO
--DROP TABLE [dbo].[PWDQuestion]
--GO
--創立測試數據表,用於對稱加密
CREATE TABLE dbo.PWDQuestion
(
  CustomerID INT NOT NULL PRIMARY KEY ,
  PasswordHintQuestion NVARCHAR(300) NOT NULL ,
  PasswordHintAnswer VARBINARY(200) NOT NULL
)
GO
--拔出加密數據
OPEN SYMMETRIC KEY sym_Demo
DECRYPTION BY PASSWORD ='newnew!456'
INSERT  dbo.PWDQuestion ( CustomerID, PasswordHintQuestion, PasswordHintAnswer )
VALUES  ( 12, '您出身的病院稱號?', ENCRYPTBYKEY(KEY_GUID('sym_Demo '), '杭州市一') )
CLOSE SYMMETRIC KEY sym_Demo

--檢查未加密的數據:
--解密數據
OPEN SYMMETRIC KEY sym_Demo
DECRYPTION BY PASSWORD ='newnew!456'
SELECT  CustomerID, PasswordHintQuestion,
        CAST(DECRYPTBYKEY(PasswordHintAnswer) AS VARCHAR(200)) PasswordHintAnswer
FROM    dbo.PWDQuestion
WHERE   CustomerID = 12
--翻開後切記封閉!!!
CLOSE SYMMETRIC KEY sym_Demo

--不翻開直接讀取
SELECT  CustomerID, PasswordHintQuestion,
        CAST(DECRYPTBYKEY(PasswordHintAnswer) AS VARCHAR(200)) PasswordHintAnswer
FROM    dbo.PWDQuestion
WHERE   CustomerID = 12


--至此,似乎曾經年夜功樂成了,別,萬萬別愉快得太早!

--這裡有個成績,假如歹意用戶不曉得CustomerID=13的PasswordHintAnswer列的真實值,
--但曉得CustomerID=14的PasswordHintAnswer列的真實值,
--則完整可以經由過程歹意調換PasswordHintAnswer列而繞過加密!!
--此時,我們索性連CustomerID列作為驗證列也一路加密,以絕後患 !
--
--留意:加密的驗證列也能夠由另外一個相干表的列作為參數傳入。

--示例5、刪除對稱密鑰

--敕令:DROP SYMMETRIC KEY 刪除指定的對稱密鑰( http://technet.microsoft.com/en-us/library/ms182698.aspx)
--
--例子:

DROP SYMMETRIC KEY sym_Demo
--留意:假如加密密鑰翻開沒有封閉,則drop掉敗。

--小結:
--
--1、本文重要引見對稱密鑰的創立、刪除、檢查和用它來修正加密方法、停止數據的加密息爭密。
--
--2、對稱密鑰的特征是:在數據庫會話中應用它對數據停止加密息爭密前必需起首翻開。
--
--3、對稱密鑰可用於年夜數據的加密。
-------------------------------------------------------------------------------------------
--SQL Server 2008中的代碼平安(四):主密鑰
--在SQL Server中的加密由條理構造情勢停止處置以供給多級其余平安。
--SQL Server包括兩個用於加密數據的密鑰類型。以下圖:
--1、辦事器主密鑰(Service Master Key),位於條理構造的最頂端,而且在裝置SQL Server時主動創立,
--用於加密體系數據、鏈接的辦事器登錄名和數據庫主密鑰。
--在第一次經由過程SQL Server應用辦事主密鑰來加密證書、數據庫主密鑰或鏈接的辦事器主暗碼時,
--辦事主密鑰會主動生成,而且應用SQL Server辦事賬戶的Windows證書來生成它。
--假如必需轉變SQL Server辦事賬號,微軟建議應用SQL Server設置裝備擺設治理器,
--由於這個對象將履行生成新辦事主密鑰須要的適合的解密和加密辦法,並且可使加密條理構造堅持完全。
--辦事主密鑰也用於加密其下的數據庫主密鑰。
--
--2、數據庫主密鑰(Database Master Key),用於加密證書,和非對稱密鑰和對稱密鑰。
--一切數據庫都可以只包括一個數據庫主密鑰,在創立它時,經由過程辦事主密鑰對其加密。
--創立非對稱密鑰時,可以決議在加密非對稱密鑰對應的私鑰能否包括暗碼。
--假如示包括暗碼,將應用數據庫主密鑰來加密私鑰。
--
--我們看一組例子:
--
--示例1、備份及復原辦事主密鑰
--例1、備份及復原辦事主密鑰
--
--用到以下兩個sql敕令:
--
--BACKUP SERVICE MASTER KEY  導出辦事主密鑰。(http://msdn.microsoft.com/zh-cn/library/ms190337.aspx)
--
--RESTORE SERVICE MASTER KEY從備份文件中導入辦事主密鑰。(http://msdn.microsoft.com/zh-cn/library/ms187972.aspx)

--以下語句備份辦事主密鑰到C:\SqlBackup\SMK.bak

BACKUP SERVICE MASTER KEY
TO FILE='D:\SMK.bak'
ENCRYPTION BY PASSWORD ='123!1AB'
----留意該暗碼可使用單引號
go

--恢復辦事主密鑰
RESTORE SERVICE MASTER KEY
FROM FILE='D:\SMK.bak'
DECRYPTION BY PASSWORD ='123!1AB'
go

 

--假如該密鑰沒有現實變更,而履行密鑰恢復時,會收到提醒:

--The old and new master keys are identical. No data re-encryption is required.

--示例2、創立、再生成和刪除數據庫主密鑰
--
--用到以下兩個sql敕令:
--
--CREATE MASTER KEY 創立數據庫主密鑰(http://technet.microsoft.com/zh-cn/library/ms174382.aspx)
--
--ALTER MASTER KEY 從新生成數據庫主密鑰(http://msdn.microsoft.com/en-us/library/ms186937%28SQL.90%29.aspx)
--
--DROP MASTER KEY 刪除數據庫主密鑰(http://msdn.microsoft.com/en-us/library/ms180071.aspx)
--
--當數據庫主密鑰被顯式創立時,會同時主動生成一個額定生成的平安層,
--用於加密數據庫中的新證書和非對稱密鑰,更進一步掩護已加密的數據。

IF NOT EXISTS ( SELECT  name
                FROM    sys.databases
                WHERE   name = 'BookStore' )
    BEGIN
        CREATE DATABASE BookStore
    END
GO

USE BookStore
GO
--創立數據庫主密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'
go

USE BookStore
GO
--從新生成數據庫主密鑰
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD ='password'

--刪除數據庫主密鑰
USE BookStore
GO
DROP MASTER KEY


--留意:假如該數據庫主密鑰依然被其他數據庫對象應用,則不克不及被刪除,這點與架構相似。
--
--同時一旦創立數據庫主密鑰,就連忙備份它是一個好的習氣。
--備份數據庫主密鑰
USE BookStore
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MagneticFields!'
GO
BACKUP MASTER KEY TO FILE='D:\BookStore_Master_Key.BAK'
ENCRYPTION BY PASSWORD ='4D280837!!!'

--恢單數據庫主密鑰
RESTORE MASTER KEY FROM FILE='D:\BookStore_Master_Key.BAK'
DECRYPTION BY PASSWORD ='4D280837!!!'
ENCRYPTION BY PASSWORD ='MagneticFields!'

--與辦事主密鑰相似,假如沒有修正,則會收到以下提醒:

--The old and new master keys are identical. No data re-encryption is required.

--示例3、從數據庫主密鑰刪除辦事主密鑰
--
--當一個數據庫主密鑰被創立時,它被默許應用兩種方法加密:
--辦事主密鑰和被應用CREATE MASTER KEY 敕令中應用的暗碼。
--假如你不想應用辦事主暗碼加密數據庫主密鑰
--(這類情形下,具有sysadmin特權的login在不曉得數據庫主密鑰的條件下將不克不及拜訪加密數據),
--你可使用ALTER MASTER KEY 敕令刪除辦事主密鑰。
--
--簡單語法以下:

ALTER MASTER KEY

ADD ENCRYPTION BY SERVICE MASTER KEY |

DROP ENCRYPTION BY SERVICE MASTER KEY

--因為辦事主密鑰許可具有足夠允許(如sysadmin)的用戶主動應用數據庫主密鑰解密,
--是以,一旦刪除辦事主密鑰的加密,而再想修正數據庫主密鑰時,你必需應用一個新的敕令拜訪它。
--OPEN MASTER KEY, 語法以下:

OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'

--上面是一個例子:
ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY

--一旦履行,任何數據庫主密鑰的修正須要應用OPEN MASTER KEY的口令拜訪,
--如許是為了從新運用辦事主密鑰的加密
OPEN MASTER KEY DECRYPTION BY PASSWORD ='123456!'

--一旦辦事主密鑰被用於加密數據庫主密鑰,數據庫主密鑰不再須要被顯式翻開或封閉。
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY

--封閉數據庫主密鑰
CLOSE MASTER KEY

--小結:
--
--1、本文重要引見辦事主密鑰的備份與復原,數據庫的主密鑰的創立、從新生成、刪除和備份、復原。
--
--2、一旦創立主密鑰,連忙備份它是一個很好的習氣。

------------------------------------------------------------------------------------
--SQL Server 2008中的代碼平安(三):經由過程PassPhrase加密

--導讀:本文重要觸及EncryptByPassPhrase和DecryptByPassPhrase函數停止通行短語(PassPhrase)加密。

--媒介:
--
--在SQL Server 2005和SQL Server 2008之前。
--假如願望加密敏感數據,如財政信息、工資或身份證號,必需借助內部運用法式或算法。
--SQL Server 2005引入內建數據加密的才能,應用證書、密鑰和體系函數的組合來完成。
--
--與數字證書相似。SQL Server 證書包含公鑰和私鑰這一對密鑰,它們都用來加密息爭密數據。
--SQL Server也具有創立非對稱密鑰和對稱密鑰對象的才能。非對稱密鑰(asymmetric key)與證書類似,
--公鑰用來加密數據庫,私鑰用來解密數據。
--非對稱密鑰和證書都供給了壯大的加密強度。但在完成龐雜的加密|解密進程中具有更多的機能開支。
--更合適對年夜量數據停止加密,且具有較低機能開支的處理計劃是對稱密鑰(symmetric key),
--它是對雷同數據停止加密息爭密的一個密鑰。
--
--SQL Server許可將這些加密才能放到加密條理構造中。
--當裝置了SQL Server後,在數據庫master中創立名為辦事主密鑰的辦事器級別證書,
--並將其默綁定到SQL Server辦事賬號登錄名。
--辦事主密鑰用來加密一切其他數據庫證書和創立在SQL Server實例中的密鑰。
--別的,你也能夠在用戶數據庫中創立數據庫主密鑰(Database Master Key),
--它可以用來加密數據庫證書和密鑰。
--
--在SQL Server 2008中,微軟引入了通明數據加密(TDE),它對全部數據庫停止加密,
--而不須要修正任何拜訪它的運用法式。數據、日記文件和相干的數據庫備份都是加密的。
--假設數據庫被偷,假如沒稀有據庫加密密鑰(DEK)是不克不及拜訪數據的。
--本文及前面幾篇文章將會舉例解釋。

--在SQL Server 2008中,還引入了對可擴大密鑰治理(EKM)的支撐,
--也就意味著SQL Server可使用硬件平安模塊(HSM)來存儲和和治理加密密鑰。
--HSM可以削減數據和現實的加密密鑰耦合。

--此部門內容共分六篇文章:
--1、經由過程PassPhrase加密
--2、主密鑰
--3、非對稱密鑰加密
--4、對稱密鑰加密
--5、證書加密
--6、通明數據加密

--1、經由過程通行短語(PassPhrase)加密
--
--關於不觸及證書及密鑰的應急的數據加密,可以直接基於用戶供給的暗碼來加密息爭密數據。
--通行短語(PassPhrase)是許可存在空格的暗碼。
--這個PassPhrase不會存儲在數據庫中,因此也就意味著不會被應用存儲的體系數據“破解”。
--同時,可使用空格創立一個長的、易於記憶的句子來加密息爭密敏感數據。

--我們須要懂得的一對函數是ENCRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms190357.aspx)和DECRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms188910.aspx)
--
--這一對函數必需應用雷同的參數。
--
--我們看一個示例:
USE [pratice]
go

-- Table used to store the encrypted data
-- for the purposes of this recipe
--DROP TABLE SecretInfo
--GO

CREATE TABLE SecretInfo
(
  MySecret varbinary(max) NOT NULL  --必定要二進制數據格局
)
GO

INSERT  SecretInfo ( MySecret ) SELECT  ENCRYPTBYPASSPHRASE('123456','你好啊')

SELECT  MySecret FROM    SecretInfo

 

--想曉得原文本的內容,應用以下語句:


SELECT  CAST(DECRYPTBYPASSPHRASE('123456', MySecret) AS VARCHAR(MAX))
FROM    SecretInfo


--留意:
--
--1、應用通行短語停止加密數據,不消擔憂sysadmin辦事器腳色成員讀取數據
--(在前面文章會看到,辦事器腳色成員sysadmin具有讀取其他情勢的加密數據的內涵權限。)
--
--
--2、假定未將暗碼存儲在表中或在任何模塊(存儲進程、觸發器等)中應用暗碼,
--加密的數據將避免從數據庫備份被偷盜或在SQL Server實例中的數據庫中滲入滲出。
--假如通行短語短語暗碼洩露,數據便可以被解密。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved