随着GDPR在英国即将到来,已经拥有一个由15个用户组成的团队,在15个不同的数据库中创建虚假的SELECT语句(超过2,000个),我需要能够创建一个方法来捕获已经创建的SELECT语句并且能够分配代理键/数据而无需重写我们已有的每个程序。
需要像往常一样运行原始团队成员脚本,并且需要伪造值。
我目前的想法是创建一个存储过程:
CREATE PROC Pseudo (@query NVARCHAR(MAX))
INSERT INTO #TEMP FROM @query
通过真实和代理/伪数据的映射表对数据做一些事情。
UPDATE #TEMP
SET FNAME = (SELECT Pseudo_FNAME FROM PseudoTable PT WHERE #TEMP.FNAME = PT.FNAME)
SELECT * FROM #TEMP
这样团队成员就可以运行正常的SELECT
语句,只需使用以下命令获取伪数据:
EXEC Pseudo (SELECT FNAME FROM CUSTOMERS)
我遇到的问题是你无法使用:
INSERT INTO #TEMP FROM @query
所以我尝试通过CTE:
WITH TEMP AS (@query)
..但我也不能使用它。
当然有一种从现有选择中捕获记录集的方法,我可以将其拉入表中来修改它或捕获SELECT
语句;无需修改原始脚本。请注意,每个SELECT
语句都是唯一的,因此我无法写出COLUMN或VALUES
等。
有没有人对如何最好地解决这个问题有任何想法或工作实例?
我可以从外部做其他冗长的方法来实现这一点,但是如果可能的话,我试图在SQL中解决这个问题。
答案 0 :(得分:0)
经过一番商议后我才解决了。 我将原始SELECT SQL传递给使用了一些SQL注入的SP,后者执行INSERTed数据时。然后我从该数据集更新。
最终结果是" EXEC Pseudo('原始SQL;') 我现在必须围绕某些列设置一些基本规则作为短期修复。但至少用户可以根据需要创建NonPseudo和Pseudo数据而无需大量重做:)