SQL 2005只有相同格式的随机字母(模糊处理)

SQL 2005只有相同格式的随机字母(模糊处理),sql,random,replace,nested,obfuscation,Sql,Random,Replace,Nested,Obfuscation,我正在寻找一种生成随机字母的方法,以替换选定字段(即“全名”字段)中的现有字母。 我需要保持所有数据的格式相同,所以字母仍然是字母,数字仍然是数字,特殊字符仍然是特殊字符,空格仍然是空格 所以“约翰·保罗·琼斯”应该成为“SLFD-ANED PQZDT” 我曾尝试使用REPLACE函数来实现这一点(首先只关注字母),但在大约10次嵌套替换之后,它就停止正常工作 不是寻找其他方法来混淆,只是寻找一种能够做到上述事情的方法 在一个理想的世界里,我很想把它作为一个函数,我可以在脚本中调用它,但不知道如

我正在寻找一种生成随机字母的方法,以替换选定字段(即“全名”字段)中的现有字母。 我需要保持所有数据的格式相同,所以字母仍然是字母,数字仍然是数字,特殊字符仍然是特殊字符,空格仍然是空格

所以“约翰·保罗·琼斯”应该成为“SLFD-ANED PQZDT”

我曾尝试使用REPLACE函数来实现这一点(首先只关注字母),但在大约10次嵌套替换之后,它就停止正常工作

不是寻找其他方法来混淆,只是寻找一种能够做到上述事情的方法

在一个理想的世界里,我很想把它作为一个函数,我可以在脚本中调用它,但不知道如何做任何高级的事情,如果有人知道如何解决下面的问题,也知道如何使用它创建函数,那将是完美的

这是我的SQL,如果有人能帮忙的话

USE [DATABASE1]

DECLARE @A AS CHAR;
DECLARE @B AS CHAR;
DECLARE @C AS CHAR;
DECLARE @D AS CHAR;
DECLARE @E AS CHAR;
DECLARE @F AS CHAR;
DECLARE @G AS CHAR;
DECLARE @H AS CHAR;
DECLARE @I AS CHAR;
DECLARE @J AS CHAR;
DECLARE @K AS CHAR;
DECLARE @L AS CHAR;
DECLARE @M AS CHAR;
DECLARE @N AS CHAR;
DECLARE @O AS CHAR;
DECLARE @P AS CHAR;
DECLARE @Q AS CHAR;
DECLARE @R AS CHAR;
DECLARE @S AS CHAR;
DECLARE @T AS CHAR;
DECLARE @U AS CHAR;
DECLARE @V AS CHAR;
DECLARE @W AS CHAR;
DECLARE @X AS CHAR;
DECLARE @Y AS CHAR;
DECLARE @Z AS CHAR;

SET @A = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @B = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @C = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @D = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @E = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @F = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @G = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @H = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @I = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @J = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @K = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @L = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @M = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @N = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @O = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @P = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @Q = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @R = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @S = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @T = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @U = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @V = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @W = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @X = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @Y = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));
SET @Z = CHAR(CAST((90 - 65) * RAND() + 65 AS INT));

SELECT @A AS A
    ,@B AS B
    ,@C AS C
    ,@D AS D
    ,@E AS E
    ,@F AS F
    ,@G AS G
    ,@H AS H
    ,@I AS I
    ,@J AS J
    ,@K AS K
    ,@L AS L
    ,@M AS M
    ,@N AS N
    ,@O AS O
    ,@P AS P
    ,@Q AS Q
    ,@R AS R
    ,@S AS S
    ,@T AS T
    ,@U AS U
    ,@V AS V
    ,@W AS W
    ,@X AS X
    ,@Y AS Y
    ,@Z AS Z

SELECT c.ClientFullName
    ,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(c.ClientFullName, 'A', @A), 'B', @B), 'C', @C), 'D', @D), 'E', @E), 'F', @F), 'G', @G), 'H', @H), 'I', @I), 'J', @J), 'K', @K), 'L', @L), 'M', @M), 'N', @N), 'O', @O), 'P', @P), 'Q', @Q), 'R', @R), 'S', @S), 'T', @T), 'U', @U), 'V', @V), 'W', @W), 'X', @X), 'Y', @Y), 'Z', @Z)
FROM [DATABASE1].[dbo].[CLIENTS] c
提前感谢所有花时间阅读本文的人

在数据库中混淆/加扰数据(仅敏感数据-姓名、电话) 地址、账号等)根据与转让相关的法律 从一个国家到另一个国家的数据必须完整 随机的

这称为“加密”。互联网上有很多资源可以帮助您对数据进行加密,请使用它们

任何你自己滚动的尝试都会失败——我可以告诉你,因为你认为一些加扰的大写和小写字母会起作用——使用完美的算法,这只需要5位密钥大小(floor(lg52)),这是你现在至少需要256位的微小值

使用现有的加密技术来解决您的问题



关于您提供的链接的附加说明:此链接已有6年历史。在那个时候,许多用于进行“真正”加密的工具已经变得可用。另外,那篇文章特别指出,这只是为了创建测试数据——作者没有声称,如果有人想破解它,这将以任何方式保护您的用户。不要自欺欺人,除了“掩蔽”(实质上会删除源数据)之外,如果数据泄露,所有内容都会很容易被破解。

“所有空格和特殊字符在测试无效输入时都应该保持不变。”怎么了?输入测试应该在将数据存储到数据库之前进行!而且,您是否需要在以后对数据进行解扰?这是什么愚蠢的法律?因为这一切似乎都是确定的,而且很容易破解。我不认为这是获得PII的一种方式。虚假的安全感是一件危险的事情。一种更好的方法是将每个字母替换为单个给定字符,例如,将“John Paul Jones”替换为“AAAA-BBBB CCCCCCC”,没有明确的恢复方法,我必须同意,保留原始字符串的长度,非字母数字符号,字母数字类型泄露了太多的原始数据,不能被认为是模糊和匿名的。谢谢回复。我们正在寻找一个备份,我们的客户的数据库谁是在一个外国的法律规定,没有敏感数据可以离开他们的国家为基础。因此,我们需要将数据与原始数据尽可能紧密地联系起来(即,我们无法在现场测试数据输入)。因此,法律允许我们以正确的格式保存它,只要没有数据可以与某人相关。因此,拥有“FGLE-GLOA QPZCB”意味着我们无法将其链接回去,但同时,如果他们有问题,我们需要能够看到他们是否输入了可能导致问题的内容,因此,用一个简单的AAAA-BBBB CCCCC替换一个#符号或太多的字符等将不允许我们看到表是否正确链接,因为每个名称都大致相同。这些名称虽然是混乱的,但应能在表之间区分开来。希望这能澄清一点,如果你能把它联系起来,那么敏感数据正在离开这个国家。我一次也没有提到作者提出了这样一个说法:“混淆了原始数据——即FullName=Chris Carroll变成FullName=HSLO LCRAIRCR。对于任何对此水平满意的人,请看一篇好文章。”。同样是6岁还是6岁,我觉得这是一篇很好的文章,如果有人对扰乱数据感兴趣,我没有说这是混淆的圣经。我知道加密,但是,正如我的帖子所说,我只是在寻找一种方法,用另一个随机字母替换一个字母,保持字长不变,并保留空格和特殊字符。