我应该在 SQL Server 中使用已弃用的 MD5 函数吗?

Gab*_*abe 3 sql-server hashing sql-server-2017

我们想对我们的散列函数使用 MD5 而不是 SHA_256,但从 SQL Server 2016 开始,不推荐使用 MD5。我们将其用于散列(比较哪些记录已更改)。我们现在面临着使用这个函数冒着风险或使用 SHA_256 产生存储和性能开销的困境。令人沮丧的是,Microsoft 决定弃用这些功能,即使它们在某些情况下仍然有用。

该项目不是业务的关键组成部分。我们可能会选择 SHA_256,但这是正确的选择吗?新开发应该总是避免弃用的功能吗?

对于上下文 - 每天将有大约 1-2 百万个更新插入到一个 4 亿行表中,动态比较哈希字节。大约 30 列宽

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

在 HashBytes 函数中选择正确的算法

Han*_*non 5

来自微软的文档

当一个功能被标记为已弃用时,这意味着:

  • 该功能仅处于维护模式。不会进行新的更改,包括与新功能的互操作性相关的更改。
  • 我们努力不从未来版本中删除已弃用的功能,以使升级更容易。但是,在极少数情况下,如果该功能限制了未来的创新,我们可能会选择从 SQL Server 中永久删除该功能。
  • 对于新的开发工作,我们不建议使用已弃用的功能。

该页面的另一部分说:

下一版本的 SQL Server 支持以下 SQL Server 数据库引擎功能,但将在更高版本中弃用。SQL Server 的具体版本尚未确定。

根据您使用 MD5 和 HASHBYTES 的方式,除了使用 SHA_256 之外,您可能还有其他可用选项。

您可能有兴趣使用我记录的这种方法来确定哪些行发生了变化。它使用rowversion源表中的一列让您可以立即查看新的或有更改的行。这避免了使用弃用的功能,并且速度远远超过任何散列函数将永远是。


归档时间:

查看次数:

1549 次

最近记录:

6 年,5 月 前