【问题标题】:Encrypting a database password column加密数据库密码列
【发布时间】:2016-02-03 22:36:29
【问题描述】:

我有一张表,长这样,用来组成连接字符串(这个表大概有30条记录):

create table databases (id int not null, databaseserver varchar(30), databasename varchar(30), username varchar(30), password varchar(30), primary key (id))

我总是读到你应该在数据库中散列密码。但是,这在此处不起作用,因为必须将密码转换回文本。

我将如何处理这个问题?透明数据加密听起来像是答案。我是否能够只加密此列而无需修改任何使用该列的代码。

【问题讨论】:

  • 为什么需要将密码转换回文本?如果您想将它与用户输入进行比较,只需使用与原始密码相同的密钥来比较结果。
  • @RomanCoo,因为密码是连接字符串的一部分。
  • 是的,但是为什么要将它存储在数据库中? TDE 在这里帮不了你——它只是加密数据库使用的文件。
  • @Dan Field,以前的开发人员将密码存储在数据库表中,但没有加密。我想加密它们。
  • 我很困惑;您将数据库连接字符串存储在数据库中;要么是鸡和蛋,要么主数据库有硬编码密码,要么使用受信任的身份验证。正如 Dan 所说,在任何地方都使用受信任的身份验证,或者退出使用数据库来存储连接字符串。

标签: sql sql-server encryption


【解决方案1】:

TDE 不会在这里解决您的问题 - 它只会加密数据库文件。这不是一个坏主意,但它不会阻止有权访问该表的用户读取密码。

首先,如果您有任何其他选择,不要将带有密码的连接字符串存储在数据库中。很容易出错。

  • 您能否更改您的身份验证方案以使用可信身份验证或某种 SSO?去做。与尝试以任何明智的方式加密密码相比,它可能需要更少的重构。如果没有..
  • 这是针对网络应用程序的吗? Store them in web.config and encrypt that。如果没有...
  • 能否要求用户每次都输入密码?如果是这样,那就这样做。仅在绝对必须进行验证时存储散列版本。

如果这些都不适合您,您将不得不加密数据。您可以在 SQL Server MSDN has more information 中执行此操作。但是,如果您完全在数据层(或更具体地说,数据库)中处理此问题,它可能无法提供足够的保护——只要请求进来看起来包含正确的凭据,它就会获得明文密码。

如果您要求每个应用程序都知道正确的密钥,您还可以重构一些东西,以便应用程序只使用受信任的连接(并且目标服务器配置为正确允许)...

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    相关资源
    最近更新 更多