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

4
我需要将一些敏感信息存储在SQL Server 2008表中。这些数据是字符串类型,我不希望任何访问数据库的人能够读取它们。
我所说的敏感信息是指脏话/污言秽语的数据库。我需要确保它们不会在表格和SQL文件中随意出现。同时,我应该能够对字符串执行“=”和“like”等操作。
目前,我能想到两个选项;它们是否可行或有更好的选择?
1. 将字符串(varchar)存储为二进制数据(BLOB)。 2. 以加密格式存储,就像我们通常处理密码一样。

你有看过http://msdn.microsoft.com/en-us/library/cc278098(SQL.100).aspx吗? - Conrad Frix
2个回答

2
第三个选项,可能是最合适的,就是根本不要将这些值存储在特定的数据库中。我认为最好在其他地方存储它们,因为您可能不会针对敏感词表进行JOIN操作。
否则,您可能想使用Conrad Frix的建议,即SQL Server内置的加密支持。
我之所以这样说,是因为您说=和LIKE都必须在数据上起作用。当您使用哈希算法(如SHA/MD5等)对字符串进行哈希时,结果不会遵守人类语言LIKE语义。
如果精确相等(=)足够(即您实际上不需要能够执行LIKE查询),则可以使用加密函数来保护文本。但请记住,单向哈希函数将禁止您获取“未哈希”的字符串列表 - 如果您需要这样做,您需要使用可以解密的加密算法,例如AES。

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

2
点赞。我认为ROT13是解决这个问题的完美简单方案。相对于加密,模糊化是合理的,因为数据并不是私有的,只是“冒犯性”的。ROT13是简单的、准标准的,并且保持了与=和LIKE的兼容性,正如OP所要求的那样。 - daveidmx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接