2012-05-22 80 views
2

我的應用程序中有幾列因安全原因需要加密。 SQL Server 2008如何實現這一點?另外,我是否需要始終手動解密或自動發生?SQL Server列加密

感謝,

薩欽

回答

3

您可以創建一個Certificate,然後使用該證書Symmetric Key

CREATE CERTIFICATE YourCertificate 
WITH SUBJECT = 'Encrypted Content'; 
GO 

CREATE SYMMETRIC KEY SSN_Key 
    WITH ALGORITHM = AES_256 
    ENCRYPTION BY CERTIFICATE YourCertificate; 
GO 

解密:你可以使用DecryptByKey

的例子來自MSDN的是:

SELECT CardNumber, CardNumber_Encrypted AS 'Encrypted card number', 
    CONVERT(nvarchar, 
    DecryptByKey(CardNumber_Encrypted, 1 , 
    HashBytes('SHA1', CONVERT(varbinary, CreditCardID)))) AS 'Decrypted card number' 
FROM Sales.CreditCard; 

http://msdn.microsoft.com/en-us/library/ms179331(v=sql.105).aspx

+0

將我需要做的任何解密在我的代碼或將SQL Server的處理這個問題? –

+0

@SachinKainth - 您需要手動解密。你可以通過DecryptByKey來做到這一點(請參閱我的編輯) –

0

第一關:使用此代碼創建assym重點:

USE [yourDB]  
GO  
CREATE ASYMMETRIC KEY ClaveAsym  
WITH ALGORITHM = RSA_2048 ---->Take a look in this type of algorithms  
ENCRYPTION BY PASSWORD = 'yourKey' 
GO 

記住這一點,你必須要總是聲明一個變量你想解密或加密:

DECLARE @KEYID INT SET @KEYID = AsymKey_ID('ClaveAsym') 

解密數據

SELECT columnA, CAST(DecryptByAsymKey(@keyid, columnUser, N'yourKey') AS VARCHAR(100)), CONVERT(VARCHAR(MAX), DECRYPTBYASYMKEY(@keyId, columnPass, N'yourKey')) FROM yourTable 

加密數據

DECLARE @User VARCHAR(MAX), @pass VARCHAR(MAX)  
SET @User = 'yourUser'  
sET @pass = 'yourPass'  
DECLARE @KEYID INT SET @KEYID = AsymKey_ID('ClaveAsym')  
INSERT INTO yourTable(User, passw) VALUES EncryptByAsymKey (@keyid, @User), EncryptByAsymKey (@keyid, @pass))