新聞中心
使用SQL Server的ENCRYPTBYPASSPHRASE函數(shù)進(jìn)行數(shù)據(jù)加密,使用DECRYPTBYPASSPHRASE函數(shù)進(jìn)行解密。
在SQL Server中進(jìn)行數(shù)據(jù)加密和解密,可以使用以下方法:

1、使用透明數(shù)據(jù)加密(TDE)
透明數(shù)據(jù)加密是SQL Server提供的一種數(shù)據(jù)加密功能,可以在存儲(chǔ)過程中對(duì)數(shù)據(jù)進(jìn)行加密和解密,以下是使用TDE的步驟:
創(chuàng)建密鑰:首先需要?jiǎng)?chuàng)建一個(gè)加密密鑰,用于加密數(shù)據(jù)庫中的數(shù)據(jù),可以使用CREATE MASTER KEY語句創(chuàng)建主密鑰。
USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword';
創(chuàng)建數(shù)據(jù)庫:使用WITH ENCRYPTION子句創(chuàng)建一個(gè)新的數(shù)據(jù)庫,并指定使用剛剛創(chuàng)建的主密鑰進(jìn)行加密。
CREATE DATABASE YourDatabase WITH ENCRYPTION = ON;
查詢加密數(shù)據(jù):當(dāng)數(shù)據(jù)庫被加密后,所有存儲(chǔ)在其中的數(shù)據(jù)都會(huì)被加密,可以使用SELECT語句查詢加密數(shù)據(jù)。
USE YourDatabase; GO SELECT * FROM YourTable;
2、使用列級(jí)加密(ColumnLevel Encryption)
列級(jí)加密允許對(duì)數(shù)據(jù)庫表中的特定列進(jìn)行加密和解密,以下是使用列級(jí)加密的步驟:
創(chuàng)建密鑰:首先需要?jiǎng)?chuàng)建一個(gè)加密密鑰,用于加密數(shù)據(jù)庫表中的列,可以使用CREATE MASTER KEY語句創(chuàng)建主密鑰。
USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword';
創(chuàng)建證書:為了對(duì)列進(jìn)行加密,需要?jiǎng)?chuàng)建一個(gè)證書,可以使用CREATE CERTIFICATE語句創(chuàng)建證書。
USE master; GO CREATE CERTIFICATE YourCertificate WITH PRIVATE KEY (FILE = 'YourCertificateFile', DECRYPTION BY PASSWORD = 'YourCertificatePassword');
修改表結(jié)構(gòu):在需要加密的列上添加一個(gè)encryption_type屬性,并設(shè)置其值為ENCRYPTED_WITH_VALUE,將該列的數(shù)據(jù)類型設(shè)置為VARCHAR(MAX)。
ALTER TABLE YourTable ADD YourEncryptedColumn VARBINARY(MAX) NULL, ADD CONSTRAINT YourEncryptedColumn_Encrypted DEFAULT (0x0) FOR YourEncryptedColumn;
更新列值:使用UPDATE語句更新列的值,將其設(shè)置為要加密的數(shù)據(jù),使用OPEN SYMMETRIC KEY和UPDATE ENCRYPTED BY語句對(duì)列進(jìn)行加密,關(guān)閉對(duì)稱密鑰。
更新列值
UPDATE YourTable SET YourEncryptedColumn = N'YourDataToEncrypt';
GO
打開對(duì)稱密鑰并加密列值
OPEN SYMMETRIC KEY YourCertificateKey DECRYPTION BY PASSWORD = 'YourCertificatePassword';
UPDATE YourTable SET YourEncryptedColumn = ENCRYPTBYKEY(KEY_GUID('YourCertificateKey'), YourEncryptedColumn);
CLOSE SYMMETRIC KEY YourCertificateKey;
查詢加密數(shù)據(jù):當(dāng)列被加密后,所有存儲(chǔ)在其中的數(shù)據(jù)都會(huì)被加密,可以使用SELECT語句查詢加密數(shù)據(jù),由于列的數(shù)據(jù)類型為VARCHAR(MAX),因此無法直接查看原始數(shù)據(jù),如果需要查看原始數(shù)據(jù),可以使用OPEN SYMMETRIC KEY和DECRYPTBYKEY語句對(duì)列進(jìn)行解密,關(guān)閉對(duì)稱密鑰。
打開對(duì)稱密鑰并解密列值 OPEN SYMMETRIC KEY YourCertificateKey DECRYPTION BY PASSWORD = 'YourCertificatePassword'; SELECT YourEncryptedColumn AS DecryptedData FROM YourTable; CLOSE SYMMETRIC KEY YourCertificateKey;
分享文章:SQLServer中如何進(jìn)行數(shù)據(jù)加密和解密
新聞來源:http://fisionsoft.com.cn/article/dhsegop.html


咨詢
建站咨詢
