【问题标题】:How to anonymize data in SQL?如何匿名化 SQL 中的数据?
【发布时间】:2019-06-18 08:27:56
【问题描述】:

我需要匿名化 SQL 数据 (VAR NAME = "ArId") 中的变量。

变量包含10 numbers + 1 letter + 2 numbers。我需要随机化前 10 个数字,然后保留字母 + 最后两个数字。

我已经尝试过rand() 函数,但这会随机化整个值。

SELECT TOP 1000 *
FROM [XXXXXXXXXXX].[XXXXXXXXXX].[XXXXX.TEST]

我只加载了数据。

编辑(来自“答案”):

我试过了:更新 someTable SET someColumn = CONCAT(CAST(RAND() * 10000000000 as BIGINT), RIGHT(someColumn, 3))

但是,由于我对 SQL 完全陌生,我不知道如何进行这项工作。我为要创建的变量输入了 'someColumn = new column name。 RIGHT(someColumn) = 我正在更改的列。当我这样做时,我得到正确的函数需要 2 个参数的消息??

Zohar 的示例:我有一个变量,例如:1724981628R01在这个变量中的所有这些值上,我想随机化前 10 个字母并保留最后三个 (R01)。我该怎么做?

【问题讨论】:

  • 抱歉,我使用的是 Microsoft SQL Server 2016
  • 对不起,我不明白这个问题。请edit 将示例数据包括为 DDL+DML(创建表和插入语句)、您当前的尝试和期望的结果。请注意,我们只需要可以证明问题的示例数据,它不一定是您实际项目中的实际数据。在大多数情况下,declare @T as table (...).... insert into @T... 就足够了。
  • 这里的“变量”是什么意思,你不是要更新表格吗?

标签: sql sql-server sql-server-2016 data-masking


【解决方案1】:

几件事。首先,您转换为大 int 并不能保证结果具有正确的字符数。

其次,rand() 对于查询的所有行都是常量。试试这个版本:

UPDATE someTable
    SET someColumn = CONCAT(FORMAT(RAND(CHECKSUM(NEWID())
                                       ), '0000000000'
                                  ),
                            RIGHT(someColumn, 3)
                           );

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多