Biggle's Blog

Web- und Software Development

by Mario Binder

MSSQL Shuffle Funktion zum anonymisieren von Daten

Ich wollte einige Datensätze für die Testumgebung anonymisieren und heraus kam eine kleine Funktion, die ein zufälligen String generiert. Als Parameter wird der Funktion eine beliebige Zeichenfolge und die Angabe, wie lang der zufällige Wert sein soll, mitgegeben. Der erste Buchstabe im Resultat wird als Großbuchstabe zurückgegeben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE VIEW Random
    AS SELECT RAND() AS RAND
GO
 
CREATE FUNCTION Shuffle(@string AS nvarchar(MAX), @LENGTH AS INT)
RETURNS VARCHAR(MAX)
BEGIN
    DECLARE @RESULT NVARCHAR(MAX)
    DECLARE @counter INT
 
    SET @RESULT = ''
    SET @counter = 0
 
    WHILE @counter < @LENGTH
    BEGIN
 
        SELECT @RESULT = @RESULT + SUBSTRING(@string, (SELECT CONVERT(INT, (RAND * LEN(@string) + 1)) FROM Random), 1)
        SET @counter = @counter + 1
    END
 
    SELECT @RESULT = UPPER(LEFT(@RESULT,1)) + SUBSTRING(@RESULT,2,LEN(@RESULT))
    RETURN @RESULT
END
GO

Aufzurufen wird das Ganze dann wie folgt:

1
2
UPDATE dbo.Persons
SET Lastname = dbo.Shuffle('abcdefghijklmnoprstuvwz', 8)

Alternativ könnte man anstelle der Zeichen, den alten Wert aus der Spalte und die Länge mitgeben,

1
2
UPDATE dbo.Persons
SET Lastname = dbo.Shuffle(Lastname, LEN(Lastname))

Viel Spaß beim entwickeln : )
Cool wäre jetzt noch, wenn man den String lesbar macht, hat einer eine Idee?