【发布时间】:2012-06-27 19:48:54
【问题描述】:
我们有一个包含大量数据的大型数据库。我最近发现我们的销售和运输部门一直在使用应用程序的一部分来公开存储客户的信用卡号码。我们已经阻止了它,但现在有数千行带有数字。
我们正试图弄清楚如何扫描某些列以查找连续的 16 位数字(或破折号分隔)并将它们替换为 X。
这不是一个简单的 UPDATE 语句,因为卡号存储在大量文本中。到目前为止,我一直无法弄清楚 SQL Server 是否能够使用正则表达式(似乎没有)。
所有其他方法都失败了,我将通过 PHP 来做这件事,因为这是我最擅长的……但这会很痛苦。
【问题讨论】:
-
RegEx 在 SQL Server 中当然是可能的,只是不是本机的 - 你需要使用 CLR。网上有很多这样的例子:-codeproject.com/Articles/42764/…-justgeeks.blogspot.com/2008/08/…-可能是这里最权威的资源:-sqlmag.com/article/tsql3/clr-or-not-clr-is-that-the-question- 在 SQL Server 2008 R2+ 中,您可以通过 Master Data Services 访问一些 RegEx 功能,而无需编写自己的 CLR:-thefirstsql.com/2011/02/07/r
-
这是一种应用程序代码往往更易于设计处理的事情。你是对的,reg ex 似乎是要走的路。您可以在 C# 中执行此操作并将其放入 CLR 存储过程中,以便可以轻松地从 SSMS 运行它。遗憾的是,由于这是在文本字段中,您可能需要确定哪些记录可能是错误的,然后让某人手动检查它们。毕竟,零件号也可能以正确的位数结束。我建议那些数据输入错误的人来做人工检查。
-
您还可以搜索短语 credit card、card number、CCN 作为可能包含卡号的记录的线索。
-
我同意 HLGEM。此外,考虑在前端添加验证以防止将来发生这种情况。除了告诉用户不要这样做,您还可以尝试检测是否输入了卡号,然后要求主管进行徽章扫描或其他操作。这样,它以后再次成为问题的可能性就较小。
-
是的,您也应该清楚对用户的法律影响。如果您的系统不符合 PCI 标准,您可能会完全失去取卡的能力。
标签: sql sql-server credit-card replace