本文属于SQL Server安全专题系列
在SQL SERVER中的数据可以使用密码或者证书来加密。本文分别来演示一下使用密码和证书来加密。
使用密码或短语(passphrase)加密数据
在SQL Server中最常见的数据加密函数是ENCRYPTBPASSPHRASE()。这个函数可以使用密码或者短语直接对数据加密而不需要经过SQL Server的加密层次体系。下面使用AdventureWorks2016的Sales.CreditCard表进行演示。从名字可以看出这个表是存储信用卡信息。如果打开表,可以看到还是明文存储,这种安全性明显是不足的。注意:如果读者根据前面章节实操下来,会发现在SQL Server 安全篇——安全元数据(4)——加密(Ecryption)元数据中对这个表的数据进行了AE(Always Encrypted),这里要先去掉:
或使用脚本:
USE AdventureWorks2016
GO
ALTER TABLE Sales.CreditCard
ALTER COLUMN CardNumber DROP MASKED ;
下面查看原文可以发现如下图的内容:
要加密这个列,需要进行以下步骤:
- 创建一个varbinary类型的新列
- 加密CardNumber列并插入数据到新列。
- Drop掉原列(CardNumber)
- 更新代码让其使用新的列。
Step 1:创建新列
首先,注意数据类型为varbinary,其次,由于一开始并没有值,也没有默认值,所以在加列时注意不要使用NOT NULL。
USE AdventureWorks2016
GO
ALTER TABLE Sales.CreditCard ADD
CardNumberEncrypted varbinary(8000) NULL ;