加密/解密列,而不更改现有功能

时间:2018-01-24 13:27:25

标签: sql sql-server encryption

GDPR在这个办公室引起了一些麻烦。我们已经在生产中有一个数据库表,我们称之为personal_data,现在需要加密一些列。我们正在使用SQL Server 2012.我已经读过可以使用存储在数据库中的对称密钥对列进行加密和解密。

我们有许多连接到此表的现有查询,存储过程和视图,因此我们希望尽可能避免更改它们。

是否可以加密必要的现有列并查询它们而无需修改这些现有查询?

我的想法是,如果我们将personal_data表重命名为其他内容,那么创建一个名为personal_data的视图,查询personal_data表列并在那里处理解密,因此引用'personal_data'的所有内容仍然可以像以前一样工作。但如果这是可能的,那么这个解决方案的缺陷是什么?

2 个答案:

答案 0 :(得分:2)

我建议创建另一个表,比如_personal_data。加密该表中的数据,并将当前表替换为返回可接受列的表上的视图。

您可以授予每个人访问视图的权限,同时限制对基础表的访问。

这是一种合理的临时方法。对于GDPR和其他隐私计划,我更喜欢更强的限制,个人数据在完全独立的数据库中 - 因为这更容易控制访问和登录访问。

答案 1 :(得分:1)

SQL Server 2005使开发人员能够使用EncryptByKey和DecryptByKey函数加密和解密敏感数据 您可以在SQL Server Database Encryption

找到示例案例

但是这需要INSERT,UPDATE和READ语句的代码更新 例如,

SELECT
CONVERT(nvarchar, DecryptByKey(EncryptedData)) AS 'DecryptedData'
FROM myTable;

而不是直接读为

SELECT EncryptedData AS 'DecryptedData' FROM myTable;

另一种加密方法是SQL Server Transparent Data Encryption又称TDE。启用后,您无需进行任何代码更改即可写入和读取数据。但这是对保护磁盘文件的保护,而不是针对特定数据字段。一旦您使用有效连接连接数据库,所有数据对您都是透明的。