如何在SQL Server 2008中存储敏感信息?

时间:2010-08-25 16:10:04

标签: sql sql-server-2008

我需要在SQL Server 2008的表中存储一些敏感信息。 数据是一个字符串,我不希望它以人类可读的格式访问数据库。

我所说的敏感信息是一个脏/肮脏的词汇数据库。我需要确保它们不会在表和SQL文件中浮动。 与此同时,我应该能够在字符串上执行“=”和“like”等操作。

到目前为止,我可以想到两个选择;这些工作还是更好的选择?

  1. 将字符串(varchar)存储为二进制数据(BLOB)
  2. 以一些加密格式存储,就像我们通常使用密码一样。

2 个答案:

答案 0 :(得分:2)

可能最合适的第三种选择是根本不将这些值存储在特定数据库中。我认为将它们存储在其他地方可能更合适,因为你可能不会加入敏感词汇表。

否则,您可能想要使用Conrad Frix建议的SQL Server内置加密支持。

我说这个的原因是因为你说=和LIKE必须适用于你的数据。当您使用哈希算法(如SHA / MD5 /等)散列字符串时,结果将不遵循人类语言LIKE语义。

如果精确等式(=)足够(即您实际上不需要能够进行LIKE查询),则可以使用加密函数来保护文本。但请记住,单向散列函数会禁止您获取“未散列”的字符串列表 - 如果您需要这样做,则需要使用可以进行解密的加密算法,例如AES。

答案 1 :(得分:1)

如果您使用rot13,那么您仍然可以使用=和LIKE。这也适用于除SQL数据库之外的任何存储方法,如果防止偶然/偶然视图(包括搜索引擎索引,如果列表是公共的)那么重要。