我深入研究了这个问题,并提出了一些解决方案,但在我选择之前我想要你的意见。
数据库:SQL Server 2014
我有三个varchar列FirstName, MiddleName, LastName
。
我已加密这3列,即这些列中的数据已加密。
我的应用程序具有操作员进行名称搜索的功能,以便当操作按name
的顺序进入LastName FirstName MiddleName
时,数据库需要搜索它。该名称不是这三列中的完全匹配 - 因此需要like
查询。
由于这些列已加密,因此您无法直接在三列的串联上应用like
运算符。您必须在连接时解密值,然后应用like
运算符 - 考虑到数据库的大小(〜百万行),这将是太慢。您也无法索引加密列。
第二个选项是不加密LastName
(因为任何人都不能仅通过姓氏来识别) - 在LastName
上有索引,然后通过解密和执行like
查询连接其他两列。我仍然认为这不起作用。
第三个选项是,在INSERTING
新行之前,按照搜索(LastName + ' ' + FirstName + ' ' + MiddleName)
的要求连接字符串,计算SOUNDEX,然后将SOUNDEX存储在一个单独的列中,然后可以对其进行索引和搜索。
有人可以对此有所了解,并建议您是否有其他不同的搜索方法?
感谢。