加密数据库密码列

时间:2016-02-03 22:36:29

标签: sql sql-server encryption

我有一个表,看起来像这样,用于组成连接字符串(此表中有大约30条记录):

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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