SQL Always Encrypted与SQL动态数据屏蔽

时间:2018-08-27 09:18:35

标签: sql-server sql-server-2008

我不确定在SQL Server DB的单个列中隐藏数据的两种方法。

1. SQL Always Encrypted

2. SQL Dynamic Data Masking

在阅读完这两篇文章后,我的理解是,Always EncryptedDynamic Data Masking更安全,因为存储的数据是加密的,而不是在密码上加上掩码。

但是,如果用户只是想向数据库管理员隐藏密码字段,那么在这种情况下的日常使用会有什么影响?

  

要隐藏的数据:密码

     

使用“密码”列的功能:重置密码,更改密码,在创建新用户时插入新密码行

任何建议将不胜感激。


P.S。我最初的计划是对密码字段使用SHA1 + Salt哈希,并存储哈希值而不是密码。但是,如果只需要在DB中隐藏该字段,我发现上面的其他两种方法可能就足够了。

2 个答案:

答案 0 :(得分:1)

如果要向数据库管理员隐藏PW,则动态数据屏蔽不在工作范围内。这只是在表示层将其掩盖。

AlwaysEncrypted将加密的责任移交给客户端应用程序,这意味着加密和解密是在应用程序之外进行的,通常来说数据库管理员无法读取数据。

因此,这取决于您对隐藏的定义。如果您希望它对管理员隐藏,则始终需要加密。

编辑

Always Encrypted始终仅在2016年提供给入门者,但自2005年以来一直提供列级加密。但是要回答您的问题,不,DBA不必拥有王国的密钥。 AE被设计为在驱动程序级别处理加密和解密。以下信息来自official 70-764 exam reference by Victor Isakov

在较高的层次上,AE体系结构的工作如图1-5所示:

  1. 客户端应用程序发出参数化查询。它使用新的列加密设置=已启用;连接字符串中的选项
  2. 增强的ADO.NET驱动程序使用[sp_describe_parameter_encryption]系统存储过程来查询数据库引擎,以确定哪些参数以加密列为目标。对于每个需要加密的参数,驱动程序都会检索加密算法和在加密阶段将使用的其他信息
  3. 驱动程序在将密文发送到数据库引擎之前,使用列主密钥(CMK)加密参数值。
  4. 数据库引擎检索结果集,将适当的加密元数据附加到任何加密的列,然后将其发送回客户端应用程序。数据在数据库中处于静止状态时以及从数据库引擎到客户端应用程序的飞行过程中都被加密。
  5. 客户端应用程序的驱动程序解密所有加密的文件

答案 1 :(得分:1)

在任何情况下,都不得将密码存储在数据库表中或与此有关的任何时间段内。

您应该对密码进行哈希处理并存储哈希值。考虑使用SHA 2或更高版本,并加盐。

有关更多详细信息,请参见NIST:https://csrc.nist.gov/Projects/Hash-Functions

SQL Server 2008+最多支持SHA2-512:

https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql?view=sql-server-2017

DECLARE @HashThis NVARCHAR(4000)
SET @HashThis = CONVERT(NVARCHAR(4000),'dslfdkjLK85kldhnv$n000#knf');  
SELECT HASHBYTES('SHA2_512', @HashThis);

要查看如何添加密码,请参阅下面的文章。值得指出的是,散列和加盐应在应用程序层进行处理,因为DBA可以看到在SQL Profiler中加盐的密码。要非常小心。

https://www.mssqltips.com/sqlservertip/3293/add-a-salt-with-the-sql-server-hashbytes-function/

其他信息:

https://www.mssqltips.com/sqlservertip/4037/storing-passwords-in-a-secure-way-in-a-sql-server-database/

最后一点:如果有可能,您正在执行此练习作为对Web应用程序中的用户进行身份验证的方法,那么您应该为指定的应用程序框架查找身份验证模块。例如,ASP.NET随Microsoft的Identity 2.0系统一起提供,该系统处理端到端的身份验证过程。

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.1&tabs=visual-studio

相关问题