简介

加密是指通过使用密钥或密码对数据进行模糊处理的过程。在SQL Server中,加密并不能替代其他的安全设置,可以当数据库破解或是备份被盗取后的最后一道防线,通过加密,未经授权的人在没有密匙或密码的情况下所窃取的数据变成毫无意义。

什么是数据加密

加密是指通过使用密钥或密码对数据进行模糊处理的过程,如图:

sql server如何给单张表加密解密 sqlserver数据库加密解密_Server


加密算法的选择

SQL Server提供了比如:DES、Triple DES、TRIPLE_DES_3KEY、RC2、RC4、128 位 RC4、DESX、128 位 AES、192 位 AES 和 256 位 AES这些加密算法,没有某种算法能适应所有要求,每种算法都有长处和短处

加密

创建数据库主密钥

CREATE MASTER KEY ENCRYPTION BY PASSWORD ='Pa$$word'

创建证书

CREATE CERTIFICATE CertTest 
with SUBJECT = 'Test Certificate'
GO

sql server如何给单张表加密解密 sqlserver数据库加密解密_User_02


证书加密对称密钥

CREATE SYMMETRIC KEY SymmetricByCert
    WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE CertTest;
GO

sql server如何给单张表加密解密 sqlserver数据库加密解密_SQL server 数据加密_03


SQL Server中的数据列加密(Column-level Encryption)

SQL Server在2005引入了列加密的功能。使得可以利用证书,对称密钥和非对称密钥对特定的列进行加密。在具体的实现上,根据加密解密的方式不同,内置了4对函数用于加密解密:

• EncryptByCert() 和DecryptByCert()—利用证书对数据进行加密和解密

• EncryptByAsymKey() and DecryptByAsymKey()—利用非对称密钥对数据进行加密和解密

EncryptByKey() and DecryptByKey()—利用对称密钥对数据进行加密和解密

• EncryptByPassphrase() and DecryptByPassphrase()—利用密码字段产生对称密钥对数据进行加密和解密

因此,加密数据列使用起来相对比较繁琐,需要程序在代码中显式的调用SQL Server内置的加密和解密函数,这需要额外的工作量,并且,加密或解密的列首先需要转换成Varbinary类型。

我们看下怎么给数据加密以及解密
首先看加密:

打开之前创建的由证书加密的对称密钥
OPEN SYMMETRIC KEY SymmetricByCert DECRYPTION BY CERTIFICATE CertTest;
------比如加密名字如下图 类型一定是Varbinary(500)
insert SYS_User(User_Name) 
values(EncryptByKey(KEY_GUID('SymmetricByCert '), '789'))

此时加密列无法直接进行查看

select CONVERT(varchar(500), User_Name) from SYS_User

sql server如何给单张表加密解密 sqlserver数据库加密解密_SQL server 数据加密_04


直接查询会显示二进制数

sql server如何给单张表加密解密 sqlserver数据库加密解密_SQL server 数据加密_05

如何解密:

OPEN SYMMETRIC KEY SymmetricByCert DECRYPTION BY CERTIFICATE CertTest;

SELECT CAST(DecryptByKey(User_Name) as varchar(100)) FROM SYS_User;

CLOSE SYMMETRIC KEY SymmetricByCert;

GO

sql server如何给单张表加密解密 sqlserver数据库加密解密_User_06


非对称密匙这里不多说,原理都差不多