2015-08-12 6 views
1

Я работаю над небольшим проектом для деперсонализации данных в нашей среде разработки (например, имена, номера телефонов, цены и т. Д.). У меня есть некоторые идеи, чтобы справиться с этим, но я не уверен, что/как он может работать. Может быть, вы можете дать мне несколько советов.MS SQL Server - данные деперсонализации

Пример:

table1 (firstname, lastname, emplyoeeid, office) 
table2 (employeeid, phonenumber, mobilephonenumber, device, addons) 

Процедура (как это должно выглядеть):

@databasename varchar (50) 

    @tablename varchar(50) 

    @attributes ??? 

    USE DATABASE @databasename 

    UPDATE TABLE @tablename 
    SET @attributes = HASHBYTES('MD5',@attributes); 

Каждый раз, когда я запускаю процедуру можно выбрать 1 имя_таблицу и список атрибутов, которые я хочу depersonalise , В предыдущем примере это будет

  1. run1: @tablename (Table1) @attributes ('Firstname', 'Lastname')
  2. RUN2: @tablename (table2) @attributes ('PhoneNumber', «mobilphonenumber ')

Процедура должна шифровать только атрибуты, перечисленные в переменной. Возможно ли реализовать такую ​​процедуру? Как я могу обрабатывать список атрибутов в переменной? Есть ли более разумные способы реализации этой логики?

Благодарим за помощь.

+0

[Вот вопрос, который вы можете захотеть взглянуть на] (http://dba.stackexchange.com/questions/78693/scrubbing-sensitive-data). –

+0

[Этот тоже] (http://dba.stackexchange.com/questions/11719/scrubbing-names-via-sql-query-batch) –

+0

[Это также может помочь (так много ресурсов в Интернете)] (http: /dba.stackexchange.com/questions/23786/data-obfuscation-in-sql-server) –

ответ

0

Вы можете использовать тип таблицы:

Create Type [dbo].[Columns] AS TABLE(
    [name] [sysname] NOT NULL 
) 
GO 

Create Proc Anonymise(
    @table sysname 
    , @Columns [dbo].[Columns] READONLY 
    ) as 
begin 
    set nocount on 

    --Checks: 
    --If @table not int sys.tables => error 
    --If @Columns empty => error 
    [email protected] not in sys.columns for @tables => error 
    --Column type not char/varchar or type xxx => error 

    Declare @list nvarchar(max), @sql nvarchar(max) 
    Select @list = coalesce(@list+N', ', N'  ')+name+N'=AnonymiseFunction('+name+N')' From @Columns 

    Set @sql = N'Update ['[email protected]+'] Set '[email protected] 
    print @sql 
    Exec sp_executesql @sql 
end 
GO 

И выполнить:

Declare @cols [dbo].[Columns] 
Insert Into @cols Values('x',) ('y') 
Exec Anonymise 'table', @cols 

Вы также можете заменить , @Columns [dbo].[Columns] на NVARCHAR (макс), разделенных запятой. В начале этого прок, вы должны объявить табличную переменную:

declare @columns Table(name sysname) 

и использовать CTE, чтобы разбить строку в @columns таблицу.

Разбивает строку: http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx

+0

Спасибо! Это подходит для меня :-) –