Для MS Sql Server
/*
** Project: BPMonline
** DBMS : MSSQL 2008
** Type : Stored Procedure
** Name : tsp_AnonymizeAllData
*/
IF NOT OBJECT_ID('[dbo].[tsp_GetAnonymizationIngoreColumns]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_GetAnonymizationIngoreColumns]
END
GO
CREATE PROCEDURE [dbo].[tsp_GetAnonymizationIngoreColumns]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @baseLookupSchemaUId uniqueidentifier = '11AB4BCB-9B23-4B6D-9C86-520FAE925D75'
DECLARE @baseCodeLookupSchemaUId uniqueidentifier = '2681062B-DF59-4E52-89ED-F9B7DC909AB2'
DECLARE @ignoreColumns table (tableName SYSNAME, columnName SYSNAME)
INSERT INTO @ignoreColumns VALUES(N'Activity', N'AllowedResult')
INSERT INTO @ignoreColumns VALUES(N'ActivityCategory', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ActivityParticipantRole', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ActivityPriority', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ActivityStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ActivityType', N'Code')
INSERT INTO @ignoreColumns VALUES(N'ActivityType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'AdditionalParam', N'ColumnCaption')
INSERT INTO @ignoreColumns VALUES(N'Amenity', N'Name')
INSERT INTO @ignoreColumns VALUES(N'AmenitySubtype', N'Name')
INSERT INTO @ignoreColumns VALUES(N'BulkEmailCategory', N'Name')
INSERT INTO @ignoreColumns VALUES(N'BulkEmailLaunchOption', N'Name')
INSERT INTO @ignoreColumns VALUES(N'CallDirection', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Campaign', N'SchemaData')
INSERT INTO @ignoreColumns VALUES(N'CampaignFilter', N'SearchData')
INSERT INTO @ignoreColumns VALUES(N'CampaignStepType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'CashflowType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'CashflowType', N'Description')
INSERT INTO @ignoreColumns VALUES(N'CaseStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'CaseStatus', N'ButtonCaption')
INSERT INTO @ignoreColumns VALUES(N'Category', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ChartAggregationType', N'AggregationTypeCode')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'ChartEntityColumn')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'ChartSeriesKind')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'Filter')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'GroupByField')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'GroupByTypeDateTimeId')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'ModuleObjAccessField')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'OrderByChartPropertyColumn')
INSERT INTO @ignoreColumns VALUES(N'ChartProperty', N'OrderDirection')
INSERT INTO @ignoreColumns VALUES(N'Command', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Communication', N'Code')
INSERT INTO @ignoreColumns VALUES(N'Communication', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ConfigItemCategory', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ConfigItemStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ConfigItemType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ContentBlock', N'Config')
INSERT INTO @ignoreColumns VALUES(N'ContextHelp', N'ContextHelpId')
INSERT INTO @ignoreColumns VALUES(N'ContextHelp', N'LMSUrl')
INSERT INTO @ignoreColumns VALUES(N'ContextHelp', N'ProductEdition')
INSERT INTO @ignoreColumns VALUES(N'DataType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'DependencyCategory', N'Name')
INSERT INTO @ignoreColumns VALUES(N'DependencyType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'DependencyType', N'ReverseTypeName')
INSERT INTO @ignoreColumns VALUES(N'Dimension', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Dimension', N'Path')
INSERT INTO @ignoreColumns VALUES(N'DisplayDateFormat', N'Format')
INSERT INTO @ignoreColumns VALUES(N'DeadlineCalcSchemas', N'Name')
INSERT INTO @ignoreColumns VALUES(N'DeadlineCalcSchemas', N'Default')
INSERT INTO @ignoreColumns VALUES(N'DeadlineCalcSchemas', N'Handler')
INSERT INTO @ignoreColumns VALUES(N'DocumentState', N'Name')
INSERT INTO @ignoreColumns VALUES(N'DocumentType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'EmailSendStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'EmailTemplateMacros', N'ColumnPath')
INSERT INTO @ignoreColumns VALUES(N'EmailTemplateMacros', N'Position')
INSERT INTO @ignoreColumns VALUES(N'EmailTemplateMacros', N'Name')
INSERT INTO @ignoreColumns VALUES(N'EmailType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'EntitySchemaRecRightOperation', N'Description')
INSERT INTO @ignoreColumns VALUES(N'EntitySchemaRecRightOperation', N'Value')
INSERT INTO @ignoreColumns VALUES(N'ESNNotificationType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ESNNotificationType', N'Action')
INSERT INTO @ignoreColumns VALUES(N'ExternalSource', N'Name')
INSERT INTO @ignoreColumns VALUES(N'FolderType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Gender', N'Name')
INSERT INTO @ignoreColumns VALUES(N'GroupByTypeDateTime', N'Description')
INSERT INTO @ignoreColumns VALUES(N'GroupByTypeDateTime', N'Name')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParameter', N'AmenityType')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParameter', N'ParameterClass')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParameter', N'ParameterDisplayName')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParameter', N'ParameterName')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParameter', N'ParameterProperty')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParameter', N'PropertyPath')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParameter', N'SelectedParameter')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParamValue', N'AmenityValue')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParamValue', N'ParameterDisplayValue')
INSERT INTO @ignoreColumns VALUES(N'IntegrationParamValue', N'ParameterValue')
INSERT INTO @ignoreColumns VALUES(N'IntegrationSettings', N'Name')
INSERT INTO @ignoreColumns VALUES(N'IntroPageLookup', N'CodePage')
INSERT INTO @ignoreColumns VALUES(N'IntroPageLookup', N'VideoUrl')
INSERT INTO @ignoreColumns VALUES(N'IntroPageLookup', N'VideoCaption')
INSERT INTO @ignoreColumns VALUES(N'IntroPageLookup', N'AcademyUrl')
INSERT INTO @ignoreColumns VALUES(N'KnowledgeBaseType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LDAPAuthType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LDAPAuthType', N'Value')
INSERT INTO @ignoreColumns VALUES(N'LeadDisqualifyReason', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LeadMedium', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LeadRegisterMethod', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LeadType', N'Description')
INSERT INTO @ignoreColumns VALUES(N'LeadType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LeadStage', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LeadTypeStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LendingState', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ListingType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Listing', N'Latitude')
INSERT INTO @ignoreColumns VALUES(N'Listing', N'Longitude')
INSERT INTO @ignoreColumns VALUES(N'Lookup', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LookupFolder', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Macros', N'Name')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'Name')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'Address')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'Port')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'UseSSL')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'UseSSLforSending')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'SMTPServerAddress')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'SMTPPort')
INSERT INTO @ignoreColumns VALUES(N'MailServer', N'ExchangeEmailAddress')
INSERT INTO @ignoreColumns VALUES(N'MailServerType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'MailSyncPeriod', N'Name')
INSERT INTO @ignoreColumns VALUES(N'MailSyncPeriod', N'Code')
INSERT INTO @ignoreColumns VALUES(N'MainParam', N'Name')
INSERT INTO @ignoreColumns VALUES(N'MessageListener', N'ClassName')
INSERT INTO @ignoreColumns VALUES(N'MessagePublisher', N'ClassName')
INSERT INTO @ignoreColumns VALUES(N'MessageNotifier', N'ClassName')
INSERT INTO @ignoreColumns VALUES(N'OAuthApplications', N'AppClassName')
INSERT INTO @ignoreColumns VALUES(N'OAuthApplications', N'ClientId')
INSERT INTO @ignoreColumns VALUES(N'OAuthApplications', N'ClientClassName')
INSERT INTO @ignoreColumns VALUES(N'OAuthApplications', N'SecretKey')
INSERT INTO @ignoreColumns VALUES(N'MLModel', N'Name')
INSERT INTO @ignoreColumns VALUES(N'MLModel', N'MetaData')
INSERT INTO @ignoreColumns VALUES(N'MLModel', N'TrainingSetQuery')
INSERT INTO @ignoreColumns VALUES(N'MLModel', N'BatchPredictionQuery')
INSERT INTO @ignoreColumns VALUES(N'MLModelState', N'Code')
INSERT INTO @ignoreColumns VALUES(N'MLPrediction', N'Value')
INSERT INTO @ignoreColumns VALUES(N'MLPrediction', N'Significance')
INSERT INTO @ignoreColumns VALUES(N'MLProblemType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'MLProblemType', N'ServiceUrl')
INSERT INTO @ignoreColumns VALUES(N'MLProblemType', N'TrainingEndpoint')
INSERT INTO @ignoreColumns VALUES(N'MLProblemType', N'PredictionEndpoint')
INSERT INTO @ignoreColumns VALUES(N'MLTrainSession', N'Error')
INSERT INTO @ignoreColumns VALUES(N'NotificationProvider', N'ClassName')
INSERT INTO @ignoreColumns VALUES(N'NotificationProvider', N'Type')
INSERT INTO @ignoreColumns VALUES(N'ParamMatchingType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Period', N'DueDate')
INSERT INTO @ignoreColumns VALUES(N'Period', N'StartDate')
INSERT INTO @ignoreColumns VALUES(N'PeriodType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'PortalSchemaAccessList', N'AccessEntitySchemaName')
INSERT INTO @ignoreColumns VALUES(N'ProblemPriority', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ProblemStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ProblemType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ProcessSchemaType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ProjectEntryType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Property', N'Latitude')
INSERT INTO @ignoreColumns VALUES(N'Property', N'Longitude')
INSERT INTO @ignoreColumns VALUES(N'QualifyStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'QualifyStatus', N'StageNumber')
INSERT INTO @ignoreColumns VALUES(N'QualifyStatus', N'StageOrder')
INSERT INTO @ignoreColumns VALUES(N'QualifyStatus', N'StageInnerOrder')
INSERT INTO @ignoreColumns VALUES(N'QualifyStatus', N'IsFinal')
INSERT INTO @ignoreColumns VALUES(N'QuickAddMenuItem', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ReleasePriority', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ReleaseStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ReleaseType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'RemindInterval', N'Description')
INSERT INTO @ignoreColumns VALUES(N'RemindInterval', N'Name')
INSERT INTO @ignoreColumns VALUES(N'RemindInterval', N'Value')
INSERT INTO @ignoreColumns VALUES(N'RequestType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'RoleInServiceTeam', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ServiceCategory', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ServiceObjectType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ServiceStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Status', N'Name')
INSERT INTO @ignoreColumns VALUES(N'TimeUnit', N'Name')
INSERT INTO @ignoreColumns VALUES(N'TimeZone', N'Offset')
INSERT INTO @ignoreColumns VALUES(N'TimeZone', N'Name')
INSERT INTO @ignoreColumns VALUES(N'DayOfWeek', N'Name')
INSERT INTO @ignoreColumns VALUES(N'DayOfWeek', N'Code')
INSERT INTO @ignoreColumns VALUES(N'DayOfWeek', N'Number')
INSERT INTO @ignoreColumns VALUES(N'LMColumnTemplate', N'ColumnName')
INSERT INTO @ignoreColumns VALUES(N'LMStartEvent', N'ConditionData')
INSERT INTO @ignoreColumns VALUES(N'LMStartEvent', N'ChangedColumns')
INSERT INTO @ignoreColumns VALUES(N'LMStartEvent', N'MessageTemplate')
INSERT INTO @ignoreColumns VALUES(N'ListenerByNotifier', N'NotifierConnectionColumn')
INSERT INTO @ignoreColumns VALUES(N'DisplayDateFormat', N'Format')
INSERT INTO @ignoreColumns VALUES(N'SysProcessLog', N'Name')
INSERT INTO @ignoreColumns VALUES(N'SysProcessLog', N'DurationInMinutes')
INSERT INTO @ignoreColumns VALUES(N'SysProcessLog', N'DurationInHours')
INSERT INTO @ignoreColumns VALUES(N'SysProcessLog', N'DurationInDays')
INSERT INTO @ignoreColumns VALUES(N'SysProcessElementLog', N'Type')
INSERT INTO @ignoreColumns VALUES(N'SysProcessElementLog', N'Caption')
INSERT INTO @ignoreColumns VALUES(N'SysProcessElementLog', N'ErrorDescription')
INSERT INTO @ignoreColumns VALUES(N'SysProcessElementLog', N'DurationInMinutes')
INSERT INTO @ignoreColumns VALUES(N'SysProcessElementLog', N'DurationInHours')
INSERT INTO @ignoreColumns VALUES(N'SysProcessElementLog', N'DurationInDays')
INSERT INTO @ignoreColumns VALUES(N'FileType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'FileType', N'Code')
INSERT INTO @ignoreColumns VALUES(N'BulkEmailStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'BulkEmailStatus', N'IsActive')
INSERT INTO @ignoreColumns VALUES(N'LeadSource', N'Name')
INSERT INTO @ignoreColumns VALUES(N'LeadSource', N'Description')
INSERT INTO @ignoreColumns VALUES(N'Country', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Country', N'Image')
INSERT INTO @ignoreColumns VALUES(N'Country', N'BilingInfo')
INSERT INTO @ignoreColumns VALUES(N'QueueStatus', N'Name')
INSERT INTO @ignoreColumns VALUES(N'QueueStatus', N'IsInitial')
INSERT INTO @ignoreColumns VALUES(N'QueueStatus', N'IsFinal')
INSERT INTO @ignoreColumns VALUES(N'City', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Region', N'Name')
INSERT INTO @ignoreColumns VALUES(N'QueuePriority', N'Name')
INSERT INTO @ignoreColumns VALUES(N'QueuePriority', N'Value')
INSERT INTO @ignoreColumns VALUES(N'Calendar', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ContractState', N'Name')
INSERT INTO @ignoreColumns VALUES(N'ContractState', N'Position')
INSERT INTO @ignoreColumns VALUES(N'Tax', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Tax', N'Percent')
INSERT INTO @ignoreColumns VALUES(N'AddressType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'AddressType', N'ForContact')
INSERT INTO @ignoreColumns VALUES(N'AddressType', N'ForAccount')
INSERT INTO @ignoreColumns VALUES(N'RelationType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'RelationType', N'ForContactContact')
INSERT INTO @ignoreColumns VALUES(N'RelationType', N'ForAccountContact')
INSERT INTO @ignoreColumns VALUES(N'RelationType', N'ForContactAccount')
INSERT INTO @ignoreColumns VALUES(N'RelationType', N'ForAccountAccount')
INSERT INTO @ignoreColumns VALUES(N'SpecificationType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'SpecificationType', N'Description')
INSERT INTO @ignoreColumns VALUES(N'Unit', N'Name')
INSERT INTO @ignoreColumns VALUES(N'Unit', N'ShortName')
INSERT INTO @ignoreColumns VALUES(N'QualifyStatus', N'Color')
INSERT INTO @ignoreColumns VALUES(N'CaseStatus', N'Color')
INSERT INTO @ignoreColumns VALUES(N'OpportunityStage', N'Color')
INSERT INTO @ignoreColumns VALUES(N'QueueObjectColumn', N'Name')
INSERT INTO @ignoreColumns VALUES(N'QueueObjectColumn', N'Caption')
INSERT INTO @ignoreColumns VALUES(N'BWSSalesPeriod', N'BWSYearMonthUnq')
INSERT INTO @ignoreColumns VALUES(N'DuplicatesHistory', N'SchemaTableName')
INSERT INTO @ignoreColumns VALUES(N'FieldForceActionType', N'Name')
INSERT INTO @ignoreColumns VALUES(N'FieldForceActionType', N'Code')
INSERT INTO @ignoreColumns VALUES(N'FieldForceActionsInRule', N'Priority')
INSERT INTO @ignoreColumns VALUES(N'FieldForceRules', N'Name')
INSERT INTO @ignoreColumns VALUES(N'FieldForceRules', N'StartDate')
INSERT INTO @ignoreColumns VALUES(N'FieldForceRules', N'DueDate')
INSERT INTO @ignoreColumns VALUES(N'FieldForceRules', N'VisitCount')
INSERT INTO @ignoreColumns
SELECT DISTINCT [Name], N'Name'
FROM SysSchema
WHERE [ParentId] IN (
SELECT [Id]
FROM SysSchema
WHERE [UId] IN (@baseLookupSchemaUId, @baseCodeLookupSchemaUId))
INSERT INTO @ignoreColumns
SELECT DISTINCT [Name], N'Code'
FROM SysSchema
WHERE [ParentId] IN (
SELECT [Id]
FROM SysSchema
WHERE [UId] = @baseCodeLookupSchemaUId)
SELECT DISTINCT tableName, columnName FROM @ignoreColumns
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_DoAnonymizationCheck]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_DoAnonymizationCheck]
END
GO
CREATE PROCEDURE [dbo].[tsp_DoAnonymizationCheck]
@DBName SYSNAME,
@moduleTablesExpression NVARCHAR(MAX),
@errorModuleCaptionExpression NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tableName SYSNAME
DECLARE @tables TABLE ([TABLE_NAME] SYSNAME)
DECLARE @columns TABLE (COLUMN_NAME SYSNAME)
INSERT INTO @tables EXEC sp_executesql @moduleTablesExpression
DECLARE @ignoreColumns TABLE (tableName SYSNAME, columnName SYSNAME)
INSERT INTO @ignoreColumns EXEC [dbo].[tsp_GetAnonymizationIngoreColumns]
DECLARE moduleTablesDB CURSOR LOCAL
FOR SELECT * FROM @tables
OPEN moduleTablesDB
WHILE 1 = 1
BEGIN
FETCH NEXT FROM moduleTablesDB INTO @tableName
IF @@FETCH_STATUS = -1 BREAK
IF @@FETCH_STATUS = -2 CONTINUE
IF @tableName = 'CaseStatus' CONTINUE
IF @tableName = 'SysProcessElementLog' CONTINUE
PRINT ('Checking ' + @tableName)
DECLARE @getUnananymazedDataCountExpression NVARCHAR(MAX)
DECLARE @countUnananymazedData INT = 0
DECLARE @displayColumnNameExpression NVARCHAR(MAX),
@defaultColumnNameExpression NVARCHAR(MAX),
@templateColumnName NVARCHAR(MAX),
@primaryColumnNameExpression NVARCHAR(MAX)
DECLARE @errorMessage NVARCHAR(MAX),
@moduleCaptionExpression NVARCHAR(MAX),
@moduleName NVARCHAR(MAX)
SET @primaryColumnNameExpression = 'SELECT kcu.[COLUMN_NAME]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] kcu
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [kcu].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE kcu.[TABLE_NAME] = ''' + @tableName +
''' AND kcu.[CONSTRAINT_NAME] LIKE ''PK%'''
INSERT INTO @columns EXEC sp_executesql @primaryColumnNameExpression
DECLARE @keyName NVARCHAR(MAX)
SET @keyName = (SELECT TOP 1 [COLUMN_NAME] FROM @columns)
DELETE FROM @columns
IF @keyName IS NULL
BEGIN
PRINT @tableName + N' пропускаем... KeyName = ' + ISNULL(@keyName, 'NULL')
CONTINUE
END
SET @displayColumnNameExpression = 'SELECT [ic].[COLUMN_NAME]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
WHERE [DATA_TYPE] IN (N''NVARCHAR'')
AND [ic].[TABLE_NAME] = ''' + @tableName + '''
AND [ic].[COLUMN_NAME] IN (''Name'', ''Title'', ''Number'', ''Type'')'
DELETE FROM @columns
INSERT INTO @columns EXEC sp_executesql @displayColumnNameExpression
IF EXISTS (SELECT * FROM @columns)
BEGIN
SELECT @templateColumnName = [COLUMN_NAME] FROM @columns
IF EXISTS(SELECT NULL FROM @ignoreColumns WHERE tableName = @tableName AND columnName = @templateColumnName)
CONTINUE
SET @getUnananymazedDataCountExpression = 'SELECT @countOUT = COUNT(*)
FROM [' + @DBName + '].[dbo].[' + @tableName + '] t1
WHERE NOT [' + @templateColumnName + '] LIKE ''' + @templateColumnName +' %''
AND [' + @templateColumnName + '] IS NOT NULL
AND [' + @templateColumnName + '] <> '''''
SELECT @getUnananymazedDataCountExpression = @getUnananymazedDataCountExpression +
CASE
WHEN @tableName='Contact' AND @templateColumnName='Name'
THEN ' AND NOT EXISTS(SELECT 1 FROM [' + @DBName + N'].[dbo].[SysAdminUnit] [u] WHERE [u].[ContactId] = [t1].[Id])'
WHEN @tableName='Account' AND @templateColumnName='Name'
THEN ' AND (Name != ''Наша компания'' OR [t1].[Id] != ''E308B781-3C5B-4ECB-89EF-5C1ED4DA488E'')'
ELSE ''
END
EXEC sp_executesql @getUnananymazedDataCountExpression, N'@countOUT INT OUTPUT', @countOUT = @countUnananymazedData OUTPUT
IF @countUnananymazedData > 0
BEGIN
SET @moduleCaptionExpression = @errorModuleCaptionExpression + '''' + @tableName + ''''
EXEC sp_executesql @moduleCaptionExpression, N'@outModuleName NVARCHAR(MAX) OUTPUT', @outModuleName = @moduleName OUTPUT
SET @errorMessage = N'Данные раздела ' + @moduleName + ' не обезличенны!'
print @templateColumnName
RAISERROR (@errorMessage, 16, 1)
RETURN
END
DELETE FROM @columns
CONTINUE
END
SET @defaultColumnNameExpression = 'SELECT Top 1 [ic].[COLUMN_NAME]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
WHERE [DATA_TYPE] IN (N''NVARCHAR'')
AND [ic].[TABLE_NAME] = ''' + @tableName + ''''
DELETE FROM @columns
INSERT INTO @columns EXEC sp_executesql @defaultColumnNameExpression
IF EXISTS (SELECT * FROM @columns)
BEGIN
SELECT @templateColumnName = [COLUMN_NAME] FROM @columns
SET @getUnananymazedDataCountExpression = 'SELECT @countOUT = COUNT(*)
FROM [' + @DBName + '].[dbo].[' + @tableName + '] t1
WHERE NOT [' + @templateColumnName + '] LIKE ''' + @templateColumnName +' %''
AND [' + @templateColumnName + '] IS NOT NULL
AND [' + @templateColumnName + '] <> '''''
SELECT @getUnananymazedDataCountExpression = @getUnananymazedDataCountExpression +
CASE
WHEN @tableName='Contact' and @templateColumnName='Name'
THEN ' AND NOT EXISTS(SELECT 1 FROM [' + @DBName + N'].[dbo].[SysAdminUnit] [u] WHERE [u].[ContactId] = [t1].[Id])'
WHEN @tableName='Account' and @templateColumnName='Name'
THEN ' AND (Name != N''Наша компания'' OR [t1].[Id] != ''E308B781-3C5B-4ECB-89EF-5C1ED4DA488E'')'
ELSE ''
END
EXEC sp_executesql @getUnananymazedDataCountExpression, N'@countOUT INT OUTPUT', @countOUT = @countUnananymazedData OUTPUT
IF @countUnananymazedData > 0
BEGIN
SET @moduleCaptionExpression = @errorModuleCaptionExpression + '''' + @tableName + ''''
EXEC sp_executesql @moduleCaptionExpression, N'@outModuleName NVARCHAR(MAX) OUTPUT', @outModuleName = @moduleName OUTPUT
SET @errorMessage = N'Данные раздела ' + @moduleName + ' не обезличенны!'
print @templateColumnName
RAISERROR (@errorMessage, 16, 1)
RETURN
END
END
DELETE FROM @columns
END
CLOSE moduleTablesDB
DEALLOCATE moduleTablesDB
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_DoDataAnonymization]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_DoDataAnonymization]
END
GO
CREATE PROCEDURE [dbo].[tsp_DoDataAnonymization]
@DBName SYSNAME,
@tablesExpression NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@tableName SYSNAME,
@columnName SYSNAME,
@keyName SYSNAME,
@expression NVARCHAR(MAX),
@type NVARCHAR(128)
DECLARE @tables TABLE ([TABLE_NAME] SYSNAME, [COLUMN_NAME] SYSNAME, [DATA_TYPE] SYSNAME)
DECLARE @columns TABLE (COLUMN_NAME SYSNAME)
DECLARE @updateChunkRowCount INT = 1000
PRINT ('Data Anonymization Tables Expression:')
PRINT (@tablesExpression)
INSERT INTO @tables EXEC sp_executesql @tablesExpression
DECLARE @ignoreColumns TABLE (tableName SYSNAME, columnName SYSNAME)
INSERT INTO @ignoreColumns EXEC [dbo].[tsp_GetAnonymizationIngoreColumns]
DECLARE @ignoreColumnsExpression NVARCHAR(MAX)
SET @ignoreColumnsExpression =
'SELECT [ic].TABLE_NAME, COLUMN_NAME
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [INFORMATION_SCHEMA].[TABLES] [it] ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE COLUMNPROPERTY(object_id([ic].TABLE_NAME), COLUMN_NAME, ''IsIdentity'') = 1
OR COLUMNPROPERTY(object_id([it].TABLE_NAME), COLUMN_NAME, ''IsComputed'') = 1'
INSERT INTO @ignoreColumns EXEC sp_executesql @ignoreColumnsExpression
DECLARE allDB CURSOR LOCAL
FOR SELECT * FROM @tables
OPEN allDB
WHILE 1 = 1
BEGIN
FETCH NEXT FROM allDB INTO @tableName, @columnName, @type
IF @@FETCH_STATUS = -1 BREAK
IF @@FETCH_STATUS = -2 CONTINUE
IF EXISTS(SELECT NULL FROM @ignoreColumns WHERE tableName = @tableName AND columnName = @columnName)
CONTINUE
DECLARE @columnNameExpression NVARCHAR(MAX)
SET @columnNameExpression = 'SELECT kcu.[COLUMN_NAME]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[KEY_COLUMN_USAGE] kcu
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [kcu].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE kcu.[TABLE_NAME] = ''' + @tableName +
''' AND kcu.[CONSTRAINT_NAME] LIKE ''PK%'''
INSERT INTO @columns EXEC sp_executesql @columnNameExpression
SET @keyName = (SELECT TOP 1 [COLUMN_NAME] FROM @columns)
DELETE FROM @columns
IF @keyName IS NULL
BEGIN
PRINT @tableName + N' пропускаем... KeyName = ' + ISNULL(@keyName, 'NULL')
CONTINUE
END
SET @expression = N'ALTER TABLE [' + @DBName + N'].[dbo].[' + @tableName + N'] DISABLE TRIGGER ALL '
EXEC(@expression)
IF (@tableName = 'MailboxSynchronizationSettings' AND @columnName = 'UserPassword')
SET @expression = N'UPDATE [' + @DBName + N'].[dbo].[' + @tableName + N'] SET [' + @columnName + N'] = ''p0mzIa0Nfdo='''
ELSE IF (@tableName = 'SysMsgUserSettings' AND @columnName = 'ConnectionParams')
SET @expression = N'UPDATE [' + @DBName + N'].[dbo].[' + @tableName + N'] SET [' + @columnName + N'] =
REPLACE([' + @columnName + N'], ''"disableCallCentre":false'', ''"disableCallCentre":true'')'
ELSE IF (@tableName = 'ActivityFile' AND @columnName = 'Data')
SET @expression =
N'WHILE (1 = 1)
BEGIN
UPDATE TOP (' + Convert(nvarchar(10), @updateChunkRowCount) + N') [' + @DBName + N'].[dbo].[' + @tableName + N'] SET [' + @columnName + N'] = 0x
WHERE [' + @columnName + N'] IS NOT NULL AND [' + @columnName + N'] <> 0x
IF @@ROWCOUNT = 0
BEGIN
BREAK
END
END'
ELSE IF (@type = N'nvarchar')
SET @expression =
N'UPDATE [CurrentTable] SET [' + @columnName + N'] = ''' + @columnName + N''' + '' '' + [rownum]
FROM (SELECT CONVERT(NVARCHAR(MAX), ROW_NUMBER() OVER (ORDER BY @@ROWCOUNT)) AS rownum, [' + @columnName + N']
FROM [' + @DBName + N'].[dbo].[' + @tableName + N']
WHERE [' + @columnName + N'] IS NOT NULL AND LEN([' + @columnName + N']) > 0 ' +
CASE
WHEN @tableName='Contact' and @columnName='Name'
THEN ' AND NOT EXISTS(SELECT 1 FROM [' + @DBName + N'].[dbo].[SysAdminUnit] [u] WHERE [u].[ContactId] = [' + @tableName + N'].[Id])'
WHEN @tableName='Account' and @columnName='Name'
THEN ' AND (Name != N''Наша компания'' OR Name != N''Our company'' OR [Id] != ''E308B781-3C5B-4ECB-89EF-5C1ED4DA488E'')'
ELSE ''
END +
') AS [CurrentTable]'
ELSE IF (@type = 'int')
SET @expression = N'WITH TableWithRowNumber AS(
SELECT
ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) as RowNumber,
[' + @columnName + N']
FROM [' + @DBName + N'].[dbo].[' + @tableName + N']
WHERE [' + @columnName + N'] IS NOT NULL
)
UPDATE TableWithRowNumber SET [' + @columnName + N'] = RowNumber'
ELSE
SET @expression =
N'UPDATE [' + @DBName + N'].[dbo].[' + @tableName + N'] SET [' + @columnName + N'] = ' +
CASE
WHEN @type = N'varbinary'
THEN N'0x'
WHEN @type = N'binary'
THEN N'0x'
WHEN @type = N'datetime' OR @type = N'datetime2' OR @type = N'date'
THEN N'CAST(DATEADD(dd, -(SELECT CEILING(150*RAND())), GETDATE()) AS ' + @type + ')'
ELSE N'1'
END +
N' WHERE [' + @columnName + N'] IS NOT NULL'
PRINT ('Updating ' + @tableName + ' column ' + @columnName)
EXEC (@expression)
SET @expression = N'ALTER TABLE [' + @DBName + N'].[dbo].[' + @tableName + N'] ENABLE TRIGGER ALL '
EXEC(@expression)
END
CLOSE allDB
DEALLOCATE allDB
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_AnonymizeAllData700]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_AnonymizeAllData700]
END
GO
CREATE PROCEDURE [dbo].[tsp_AnonymizeAllData700]
@DBName SYSNAME
AS
BEGIN
SET NOCOUNT ON;
IF (NOT EXISTS(SELECT * FROM sys.databases WHERE name = @DBName))
BEGIN
RAISERROR (N'Базы данных с таким именем не существует!', 16, 1)
RETURN
END
IF (PATINDEX('%anonymous', @DBName) = 0 AND (PATINDEX('sbx-%', @DBName) = 0) AND (PATINDEX('upd-%', @DBName) = 0))
BEGIN
RAISERROR (N'Попытка анонимизировать данные из рабочей БД!', 16, 1)
RETURN
END
DECLARE @tablesExpression NVARCHAR(MAX)
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[SysLookup] [l]
JOIN [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
ON [l].[SysEntitySchemaUId] = [s].[UId]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
AND NOT EXISTS(SELECT * FROM [' + @DBName + '].[dbo].[SysModule] [m]
WHERE [m].[SysModuleEntityId] IN (SELECT [Id]
FROM [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
WHERE [SysEntitySchemaUId] = [l].[SysEntitySchemaUId]))
)
AND [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
AND [COLUMN_NAME] NOT IN (''Code'',''SchemaToSearchName'',''ContainerId'',''ModuleName'')
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT DISTINCT([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
DECLARE
@moduleTablesExpression NVARCHAR(MAX),
@errorModuleCaptionExpression NVARCHAR(MAX)
SET @moduleTablesExpression = '
SELECT Distinct([it].[TABLE_NAME])
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
WHERE
[it].[TABLE_TYPE] = ''BASE TABLE''
AND
(
(
NOT [it].[TABLE_NAME] LIKE N''Sys%''
AND NOT [it].[TABLE_NAME] LIKE N''QRTZ%''
AND [it].[TABLE_NAME] IN (
SELECT distinct([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [it].[TABLE_NAME] LIKE N''Sys%Log''
)
ORDER BY [it].[TABLE_NAME]'
SET @errorModuleCaptionExpression = '
SELECT Top 1 @outModuleName = [m].[Caption]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[Name] = '
EXEC tsp_DoAnonymizationCheck @DBName, @moduleTablesExpression, @errorModuleCaptionExpression
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_AnonymizeAllData710]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_AnonymizeAllData710]
END
GO
CREATE PROCEDURE [dbo].[tsp_AnonymizeAllData710]
@DBName SYSNAME
AS
BEGIN
SET NOCOUNT ON;
IF (NOT EXISTS(SELECT * FROM sys.databases WHERE name = @DBName))
BEGIN
RAISERROR (N'Базы данных с таким именем не существует!', 16, 1)
RETURN
END
IF (PATINDEX('%anonymous', @DBName) = 0 AND (PATINDEX('sbx-%', @DBName) = 0) AND (PATINDEX('upd-%', @DBName) = 0))
BEGIN
RAISERROR (N'Попытка анонимизировать данные из рабочей БД!', 16, 1)
RETURN
END
DECLARE @tablesExpression NVARCHAR(MAX)
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[SysLookup] [l]
JOIN [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
ON [l].[SysEntitySchemaUId] = [s].[UId]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
AND NOT EXISTS(SELECT * FROM [' + @DBName + '].[dbo].[SysModule] [m]
WHERE [m].[SysModuleEntityId] IN (SELECT [Id]
FROM [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
WHERE [SysEntitySchemaUId] = [l].[SysEntitySchemaUId]))
)
AND [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
AND [COLUMN_NAME] NOT IN (''Code'',''SchemaToSearchName'',''ContainerId'',''ModuleName'')
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT DISTINCT([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
DECLARE
@moduleTablesExpression NVARCHAR(MAX),
@errorModuleCaptionExpression NVARCHAR(MAX)
SET @moduleTablesExpression = '
SELECT Distinct([it].[TABLE_NAME])
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
WHERE
[it].[TABLE_TYPE] = ''BASE TABLE''
AND
(
(
NOT [it].[TABLE_NAME] LIKE N''Sys%''
AND NOT [it].[TABLE_NAME] LIKE N''QRTZ%''
AND [it].[TABLE_NAME] IN (
SELECT distinct([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [it].[TABLE_NAME] LIKE N''Sys%Log''
)
ORDER BY [it].[TABLE_NAME]'
SET @errorModuleCaptionExpression = '
SELECT Top 1 @outModuleName = [m].[Caption]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[Name] = '
EXEC tsp_DoAnonymizationCheck @DBName, @moduleTablesExpression, @errorModuleCaptionExpression
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_AnonymizeAllData720]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_AnonymizeAllData720]
END
GO
CREATE PROCEDURE [dbo].[tsp_AnonymizeAllData720]
@DBName SYSNAME
AS
BEGIN
SET NOCOUNT ON;
IF (NOT EXISTS(SELECT * FROM sys.databases WHERE name = @DBName))
BEGIN
RAISERROR (N'Базы данных с таким именем не существует!', 16, 1)
RETURN
END
IF (PATINDEX('%anonymous', @DBName) = 0 AND (PATINDEX('sbx-%', @DBName) = 0) AND (PATINDEX('upd-%', @DBName) = 0))
BEGIN
RAISERROR (N'Попытка анонимизировать данные из рабочей БД!', 16, 1)
RETURN
END
DECLARE @tablesExpression NVARCHAR(MAX)
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[SysLookup] [l]
JOIN [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
ON [l].[SysEntitySchemaUId] = [s].[UId]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
AND NOT EXISTS(SELECT * FROM [' + @DBName + '].[dbo].[SysModule] [m]
WHERE [m].[SysModuleEntityId] IN (SELECT [Id]
FROM [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
WHERE [SysEntitySchemaUId] = [l].[SysEntitySchemaUId]))
)
AND [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
AND [COLUMN_NAME] NOT IN (''Code'',''SchemaToSearchName'',''ContainerId'',''ModuleName'')
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT ('First Data Anonymization Started')
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT DISTINCT([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT ('Second Data Anonymization Started')
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
DECLARE
@moduleTablesExpression NVARCHAR(MAX),
@errorModuleCaptionExpression NVARCHAR(MAX)
SET @moduleTablesExpression = '
SELECT Distinct([it].[TABLE_NAME])
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
WHERE
[it].[TABLE_TYPE] = ''BASE TABLE''
AND
(
(
NOT [it].[TABLE_NAME] LIKE N''Sys%''
AND NOT [it].[TABLE_NAME] LIKE N''QRTZ%''
AND [it].[TABLE_NAME] IN (
SELECT distinct([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [it].[TABLE_NAME] LIKE N''Sys%Log''
)
ORDER BY [it].[TABLE_NAME]'
SET @errorModuleCaptionExpression = '
SELECT Top 1 @outModuleName = [m].[Caption]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[Name] = '
PRINT ('Anonymization Check Started')
EXEC tsp_DoAnonymizationCheck @DBName, @moduleTablesExpression, @errorModuleCaptionExpression
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_AnonymizeAllData721]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_AnonymizeAllData721]
END
GO
CREATE PROCEDURE [dbo].[tsp_AnonymizeAllData721]
@DBName SYSNAME
AS
BEGIN
SET NOCOUNT ON;
IF (NOT EXISTS(SELECT * FROM sys.databases WHERE name = @DBName))
BEGIN
RAISERROR (N'Базы данных с таким именем не существует!', 16, 1)
RETURN
END
IF (PATINDEX('%anonymous', @DBName) = 0 AND (PATINDEX('sbx-%', @DBName) = 0) AND (PATINDEX('upd-%', @DBName) = 0))
BEGIN
RAISERROR (N'Попытка анонимизировать данные из рабочей БД!', 16, 1)
RETURN
END
DECLARE @tablesExpression NVARCHAR(MAX)
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[SysLookup] [l]
JOIN [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
ON [l].[SysEntitySchemaUId] = [s].[UId]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
AND NOT EXISTS(SELECT * FROM [' + @DBName + '].[dbo].[SysModule] [m]
WHERE [m].[SysModuleEntityId] IN (SELECT [Id]
FROM [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
WHERE [SysEntitySchemaUId] = [l].[SysEntitySchemaUId]))
)
AND [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
AND [COLUMN_NAME] NOT IN (''Code'',''SchemaToSearchName'',''ContainerId'',''ModuleName'')
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT DISTINCT([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
)
)
OR [ic].[TABLE_NAME] LIKE N''Sys%Log''
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
DECLARE
@moduleTablesExpression NVARCHAR(MAX),
@errorModuleCaptionExpression NVARCHAR(MAX)
SET @moduleTablesExpression = '
SELECT Distinct([it].[TABLE_NAME])
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
WHERE
[it].[TABLE_TYPE] = ''BASE TABLE''
AND
(
(
NOT [it].[TABLE_NAME] LIKE N''Sys%''
AND NOT [it].[TABLE_NAME] LIKE N''QRTZ%''
AND [it].[TABLE_NAME] IN (
SELECT distinct([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR [it].[TABLE_NAME] LIKE N''Sys%Log''
)
ORDER BY [it].[TABLE_NAME]'
SET @errorModuleCaptionExpression = '
SELECT Top 1 @outModuleName = [m].[Caption]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[Name] = '
EXEC tsp_DoAnonymizationCheck @DBName, @moduleTablesExpression, @errorModuleCaptionExpression
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_AnonymizeAllData730]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_AnonymizeAllData730]
END
GO
CREATE PROCEDURE [dbo].[tsp_AnonymizeAllData730]
@DBName SYSNAME
AS
BEGIN
SET NOCOUNT ON;
IF (NOT EXISTS(SELECT * FROM sys.databases WHERE name = @DBName))
BEGIN
RAISERROR (N'Базы данных с таким именем не существует!', 16, 1)
RETURN
END
IF (PATINDEX('%anonymous', @DBName) = 0 AND (PATINDEX('sbx-%', @DBName) = 0) AND (PATINDEX('upd-%', @DBName) = 0))
BEGIN
RAISERROR (N'Попытка анонимизировать данные из рабочей БД!', 16, 1)
RETURN
END
DECLARE @clearQrtzTriggerExpression NVARCHAR(MAX)
SET @clearQrtzTriggerExpression = 'DELETE FROM [' + @DBName + '].[dbo].[QRTZ_TRIGGERS]'
EXEC sp_executesql @clearQrtzTriggerExpression
DECLARE @sysAdminUnitExpression NVARCHAR(MAX)
DECLARE @supervisorId NVARCHAR(50)
SET @supervisorId = '7F3B869F-34F3-4F20-AB4D-7480A5FDF647'
SET @sysAdminUnitExpression = 'UPDATE [' + @DBName + '].[dbo].[SysAdminUnit] SET Name = ''Supervisor_Current'' WHERE Name = ''Supervisor'''
EXEC sp_executesql @sysAdminUnitExpression
SET @sysAdminUnitExpression = 'UPDATE [' + @DBName + '].[dbo].[SysAdminUnit] SET Name = ''Supervisor'', UserPassword = ''eF4f7sfUgBuNFei7bk+3djw/zXkaB1ODf3huR0RJDD4='', Active = 1 WHERE Id = ''' + @supervisorId + ''''
EXEC sp_executesql @sysAdminUnitExpression
DECLARE @sysSettingsValuesExpression NVARCHAR(MAX)
DECLARE @sysSettingsCodes NVARCHAR(MAX)
SET @sysSettingsCodes = '''GoogleTagManagerScript'',''UseGoogleTagManager'''
SET @sysSettingsValuesExpression = 'UPDATE [' + @DBName + '].[dbo].[SysSettingsValue] SET TextValue = '''', IntegerValue=0, FloatValue=0.00, BooleanValue=0, DateTimeValue=NULL, GuidValue=NULL, BinaryValue=NULL WHERE SysSettingsId IN (SELECT Id FROM [' + @DBName + '].[dbo].[SysSettings] WHERE Code IN('+ @sysSettingsCodes +'))'
EXEC sp_executesql @sysSettingsValuesExpression
DECLARE @tablesExpression NVARCHAR(MAX)
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND [ic].[COLUMN_NAME] NOT IN (''CreatedOn'',''ModifiedOn'')
AND NOT [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[SysLookup] [l]
JOIN [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
ON [l].[SysEntitySchemaUId] = [s].[UId]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
AND NOT EXISTS(SELECT * FROM [' + @DBName + '].[dbo].[SysModule] [m]
WHERE [m].[SysModuleEntityId] IN (SELECT [Id]
FROM [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
WHERE [SysEntitySchemaUId] = [l].[SysEntitySchemaUId]))
)
AND [ic].[TABLE_NAME] IN (
SELECT [s].[Name]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
AND NOT EXISTS(
SELECT 1
FROM [' + @DBName + '].sys.computed_columns
WHERE object_id = OBJECT_ID([ic].[TABLE_NAME]) AND name = [ic].[COLUMN_NAME]
)
)
OR ([ic].[TABLE_NAME] LIKE N''Sys%Log'' AND [ic].[TABLE_NAME] NOT IN (''SysProcessLog'', ''SysProcessElementLog'', ''SysSqlLog''))
OR [ic].[TABLE_NAME] = N''SysMsgUserSettings''
)
AND [COLUMN_NAME] NOT IN (''Code'',''SchemaToSearchName'',''ContainerId'',''ModuleName'', ''ProcessListeners'')
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
SET @tablesExpression = 'SELECT [ic].[TABLE_NAME], [ic].[COLUMN_NAME], [ic].[DATA_TYPE]
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[COLUMNS] [ic]
JOIN [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
ON [it].[TABLE_NAME] = [ic].[TABLE_NAME] AND [it].[TABLE_TYPE] = ''BASE TABLE''
WHERE [DATA_TYPE] IN (N''decimal'', N''int'', N''nvarchar'', N''varbinary'', N''date'', N''datetime'', N''datetime2'', N''binary'')
AND
(
(
NOT [ic].[TABLE_NAME] LIKE N''Sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''sys%''
AND NOT [ic].[TABLE_NAME] LIKE N''QRTZ%''
AND NOT [ic].[TABLE_NAME] IN (
SELECT DISTINCT([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
)
)
)
ORDER BY [ic].[TABLE_NAME], [COLUMN_NAME]'
PRINT (@tablesExpression)
EXEC tsp_DoDataAnonymization @DBName, @tablesExpression
DECLARE
@moduleTablesExpression NVARCHAR(MAX),
@errorModuleCaptionExpression NVARCHAR(MAX)
SET @moduleTablesExpression = '
SELECT Distinct([it].[TABLE_NAME])
FROM [' + @DBName + '].[INFORMATION_SCHEMA].[TABLES] [it]
WHERE
[it].[TABLE_TYPE] = ''BASE TABLE''
AND
(
(
NOT [it].[TABLE_NAME] LIKE N''Sys%''
AND NOT [it].[TABLE_NAME] LIKE N''QRTZ%''
AND [it].[TABLE_NAME] IN (
SELECT distinct([s].[Name])
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[ManagerName] = ''EntitySchemaManager''
)
)
OR ([it].[TABLE_NAME] LIKE N''Sys%Log'' AND [it].[TABLE_NAME] NOT IN (''SysProcessLog'', ''SysProcessElementLog'', ''SysSqlLog''))
)
ORDER BY [it].[TABLE_NAME]'
SET @errorModuleCaptionExpression = '
SELECT Top 1 @outModuleName = [m].[Caption]
FROM [' + @DBName + '].[dbo].[VwSysSchemaInWorkspace] [s]
JOIN [' + @DBName + '].[dbo].[SysModuleEntity] [sme]
ON [sme].[SysEntitySchemaUId] = [s].UId
JOIN [' + @DBName + '].[dbo].[SysModule] [m]
ON [m].SysModuleEntityId = [sme].[Id]
WHERE [s].[Name] = '
EXEC tsp_DoAnonymizationCheck @DBName, @moduleTablesExpression, @errorModuleCaptionExpression
END
GO
IF NOT OBJECT_ID('[dbo].[tsp_AnonymizeAllData]') IS NULL
BEGIN
DROP PROCEDURE [dbo].[tsp_AnonymizeAllData]
END
GO
CREATE PROCEDURE [dbo].[tsp_AnonymizeAllData]
@DBName SYSNAME
AS
BEGIN
SET NOCOUNT ON;
IF (NOT EXISTS(SELECT * FROM sys.databases WHERE name = @DBName))
BEGIN
RAISERROR (N'Базы данных с таким именем не существует!', 16, 1)
RETURN
END
IF (PATINDEX('%anonymous', @DBName) = 0 AND (PATINDEX('sbx-%', @DBName) = 0) AND (PATINDEX('upd-%', @DBName) = 0))
BEGIN
RAISERROR (N'Попытка анонимизировать данные из рабочей БД!', 16, 1)
RETURN
END
DECLARE @configurationVersion NVARCHAR(MAX)
DECLARE @sqlSolution NVARCHAR(MAX)
SET @sqlSolution = N'SELECT TOP 1 @nameOUT = [TextValue]
FROM [' + @DBName + '].[dbo].[SysSettingsValue]
WHERE [SysSettingsId] IN (SELECT [Id]
FROM [' + @DBName + '].[dbo].[SysSettings]
WHERE [Code] LIKE ''ConfigurationVersion'')
ORDER BY [Position]'
EXEC sp_executesql @sqlSolution, N'@nameOUT NVARCHAR(10) OUTPUT', @nameOUT = @configurationVersion OUTPUT
IF (@configurationVersion = '0.0.0' OR @configurationVersion = '' OR @configurationVersion = NULL)
BEGIN
RAISERROR (N'Версия конфигурации невалидна!', 16, 1)
RETURN
END
ELSE
BEGIN
IF (@configurationVersion = '7.0.0')
BEGIN
EXEC tsp_AnonymizeAllData700 @DBName
RETURN
END
IF (@configurationVersion = '7.1.0')
BEGIN
EXEC tsp_AnonymizeAllData710 @DBName
RETURN
END
IF (@configurationVersion = '7.2.0')
BEGIN
EXEC tsp_AnonymizeAllData720 @DBName
RETURN
END
IF (@configurationVersion = '7.2.1')
BEGIN
EXEC tsp_AnonymizeAllData721 @DBName
RETURN
END
IF (@configurationVersion = '7.2.2')
BEGIN
EXEC tsp_AnonymizeAllData720 @DBName
RETURN
END
IF (@configurationVersion = '7.3.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.4.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.4.1')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.5.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.6.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.7.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.8.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.8.1')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.8.2')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.8.3')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.8.4')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.9.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.9.1')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.9.2')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.10.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.10.1')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.10.2')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.10.3')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.11.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.11.1')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.11.2')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.11.3')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.12.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.12.1')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.12.2')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.12.3')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.12.4')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
IF (@configurationVersion = '7.13.0')
BEGIN
EXEC tsp_AnonymizeAllData730 @DBName
RETURN
END
DECLARE @errorMessageUnknownConfigVersion NVARCHAR(MAX)
SET @errorMessageUnknownConfigVersion = N'Версия конфигурации ' + @configurationVersion + N' не поддерживается!'
RAISERROR (@errorMessageUnknownConfigVersion, 16, 1)
END
END
GO
Инструкция:
Для анонимизации базы, необходимо сделать копию базы, назвать ее с приставкой «anonymous», к примеру, mybse_anonymous, выполнить на ней скрипт.
После выполнения скрипта, в базе появится хранимая процедура «tsp_AnonymizeAllData», с единственным параметром «DBName». Ее необходимо выполнить, заполнив этот параметр, один в один с именем этой базы, с которой вы и запускаете хранимую процедуру (к примеру: mybse_anonymous).
После того как отработает хранимая процедура анонимизации базы, в базе (в нашем примере: mybse_anonymous) не останется важных данных.
Для Oracle
/*
** Project: BPMonline
** DBMS : Oracle
** Type : Stored Procedure
** Name : tsp_AnonymizeAllData
*/
DECLARE
existsObject number;
BEGIN
SELECT COUNT(1) INTO existsObject FROM user_objects WHERE object_name = 'TmpAnonimizationData' AND object_type = 'TABLE';
IF existsObject > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE "TmpAnonimizationData"';
END IF;
END;
/
CREATE GLOBAL TEMPORARY TABLE "TmpAnonimizationData" (
TABLE_NAME VARCHAR2(100),
COLUMN_NAME VARCHAR2(100),
DATA_TYPE VARCHAR2(100)
) ON COMMIT PRESERVE ROWS;
/
CREATE OR REPLACE PROCEDURE tsp_DoDataAnonymization (schemaName IN varchar2) AS
BEGIN
DELETE FROM "TmpAnonimizationData" WHERE
(TABLE_NAME = 'Activity' AND COLUMN_NAME = 'AllowedResult') OR
(TABLE_NAME = 'ActivityCategory' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ActivityParticipantRole' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ActivityPriority' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ActivityStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ActivityType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'AdditionalParam' AND COLUMN_NAME = 'ColumnCaption') OR
(TABLE_NAME = 'Amenity' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'AmenitySubtype' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'BulkEmailCategory' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'BulkEmailLaunchOption' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'CallDirection' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Campaign' AND COLUMN_NAME = 'SchemaData') OR
(TABLE_NAME = 'CampaignFilter' AND COLUMN_NAME = 'SearchData') OR
(TABLE_NAME = 'CampaignStepType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'CashflowType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'CashflowType' AND COLUMN_NAME = 'Description') OR
(TABLE_NAME = 'CaseStatus' AND COLUMN_NAME = 'Color') OR
(TABLE_NAME = 'CaseStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'CaseStatus' AND COLUMN_NAME = 'ButtonCaption') OR
(TABLE_NAME = 'Category' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ChartAggregationType' AND COLUMN_NAME = 'AggregationTypeCode') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'ChartEntityColumn') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'ChartSeriesKind') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'Filter') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'GroupByField') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'GroupByTypeDateTimeId') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'ModuleObjAccessField') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'OrderByChartPropertyColumn') OR
(TABLE_NAME = 'ChartProperty' AND COLUMN_NAME = 'OrderDirection') OR
(TABLE_NAME = 'Command' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Communication' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ConfigItemCategory' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ConfigItemStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ConfigItemType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ContentBlock' AND COLUMN_NAME = 'Config') OR
(TABLE_NAME = 'ContextHelp' AND COLUMN_NAME = 'ContextHelpId') OR
(TABLE_NAME = 'ContextHelp' AND COLUMN_NAME = 'LMSUrl') OR
(TABLE_NAME = 'ContextHelp' AND COLUMN_NAME = 'ProductEdition') OR
(TABLE_NAME = 'DataType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'DeadlineCalcSchemas' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'DeadlineCalcSchemas' AND COLUMN_NAME = 'Default') OR
(TABLE_NAME = 'DeadlineCalcSchemas' AND COLUMN_NAME = 'Handler') OR
(TABLE_NAME = 'DependencyCategory' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'DependencyType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'DependencyType' AND COLUMN_NAME = 'ReverseTypeName') OR
(TABLE_NAME = 'Dimension' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Dimension' AND COLUMN_NAME = 'Path') OR
(TABLE_NAME = 'DisplayDateFormat' AND COLUMN_NAME = 'Format') OR
(TABLE_NAME = 'DocumentState' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'DocumentType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'EmailSendStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'EmailTemplateMacros' AND COLUMN_NAME = 'ColumnPath') OR
(TABLE_NAME = 'EmailTemplateMacros' AND COLUMN_NAME = 'Position') OR
(TABLE_NAME = 'EmailTemplateMacros' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'EmailType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'EntitySchemaRecRightOperation' AND COLUMN_NAME = 'Description') OR
(TABLE_NAME = 'EntitySchemaRecRightOperation' AND COLUMN_NAME = 'Value') OR
(TABLE_NAME = 'ESNNotificationType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ESNNotificationType' AND COLUMN_NAME = 'Action') OR
(TABLE_NAME = 'ExternalSource' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'FolderType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Gender' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'GroupByTypeDateTime' AND COLUMN_NAME = 'Description') OR
(TABLE_NAME = 'GroupByTypeDateTime' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'IntegrationParameter' AND COLUMN_NAME = 'AmenityType') OR
(TABLE_NAME = 'IntegrationParameter' AND COLUMN_NAME = 'ParameterClass') OR
(TABLE_NAME = 'IntegrationParameter' AND COLUMN_NAME = 'ParameterDisplayName') OR
(TABLE_NAME = 'IntegrationParameter' AND COLUMN_NAME = 'ParameterName') OR
(TABLE_NAME = 'IntegrationParameter' AND COLUMN_NAME = 'ParameterProperty') OR
(TABLE_NAME = 'IntegrationParameter' AND COLUMN_NAME = 'PropertyPath') OR
(TABLE_NAME = 'IntegrationParameter' AND COLUMN_NAME = 'SelectedParameter') OR
(TABLE_NAME = 'IntegrationParamValue' AND COLUMN_NAME = 'AmenityValue') OR
(TABLE_NAME = 'IntegrationParamValue' AND COLUMN_NAME = 'ParameterDisplayValue') OR
(TABLE_NAME = 'IntegrationParamValue' AND COLUMN_NAME = 'ParameterValue') OR
(TABLE_NAME = 'IntegrationSettings' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'IntroPageLookup' AND COLUMN_NAME = 'CodePage') OR
(TABLE_NAME = 'IntroPageLookup' AND COLUMN_NAME = 'VideoUrl') OR
(TABLE_NAME = 'IntroPageLookup' AND COLUMN_NAME = 'VideoCaption') OR
(TABLE_NAME = 'IntroPageLookup' AND COLUMN_NAME = 'AcademyUrl') OR
(TABLE_NAME = 'KnowledgeBaseType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LDAPAuthType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LDAPAuthType' AND COLUMN_NAME = 'Value') OR
(TABLE_NAME = 'LeadDisqualifyReason' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LeadMedium' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LeadRegisterMethod' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LeadType' AND COLUMN_NAME = 'Description') OR
(TABLE_NAME = 'LeadType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LeadStage' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LeadTypeStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LendingState' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ListingType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Listing' AND COLUMN_NAME = 'Latitude') OR
(TABLE_NAME = 'Listing' AND COLUMN_NAME = 'Longitude') OR
(TABLE_NAME = 'Lookup' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LookupFolder' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Macros' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'Address') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'Port') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'UseSSL') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'UseSSLforSending') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'SMTPServerAddress') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'SMTPPort') OR
(TABLE_NAME = 'MailServer' AND COLUMN_NAME = 'ExchangeEmailAddress') OR
(TABLE_NAME = 'MailServerType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'MailSyncPeriod' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'MainParam' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'MessageListener' AND COLUMN_NAME = 'ClassName') OR
(TABLE_NAME = 'MessagePublisher' AND COLUMN_NAME = 'ClassName') OR
(TABLE_NAME = 'MessageNotifier' AND COLUMN_NAME = 'ClassName') OR
(TABLE_NAME = 'OAuthApplications' AND COLUMN_NAME = 'AppClassName') OR
(TABLE_NAME = 'OAuthApplications' AND COLUMN_NAME = 'ClientId') OR
(TABLE_NAME = 'OAuthApplications' AND COLUMN_NAME = 'ClientClassName') OR
(TABLE_NAME = 'OAuthApplications' AND COLUMN_NAME = 'SecretKey') OR
(TABLE_NAME = 'MLModel' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'MLModel' AND COLUMN_NAME = 'MetaData') OR
(TABLE_NAME = 'MLModel' AND COLUMN_NAME = 'TrainingSetQuery') OR
(TABLE_NAME = 'MLModel' AND COLUMN_NAME = 'BatchPredictionQuery') OR
(TABLE_NAME = 'MLModelState' AND COLUMN_NAME = 'Code') OR
(TABLE_NAME = 'MLPrediction' AND COLUMN_NAME = 'Value') OR
(TABLE_NAME = 'MLPrediction' AND COLUMN_NAME = 'Significance') OR
(TABLE_NAME = 'MLProblemType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'MLProblemType' AND COLUMN_NAME = 'ServiceUrl') OR
(TABLE_NAME = 'MLProblemType' AND COLUMN_NAME = 'TrainingEndpoint') OR
(TABLE_NAME = 'MLProblemType' AND COLUMN_NAME = 'PredictionEndpoint') OR
(TABLE_NAME = 'MLTrainSession' AND COLUMN_NAME = 'Error') OR
(TABLE_NAME = 'NotificationProvider' AND COLUMN_NAME = 'ClassName') OR
(TABLE_NAME = 'NotificationProvider' AND COLUMN_NAME = 'Type') OR
(TABLE_NAME = 'ParamMatchingType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Period' AND COLUMN_NAME = 'DueDate') OR
(TABLE_NAME = 'Period' AND COLUMN_NAME = 'StartDate') OR
(TABLE_NAME = 'PeriodType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ProblemPriority' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ProblemStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ProblemType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ProcessSchemaType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ProjectEntryType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Property' AND COLUMN_NAME = 'Latitude') OR
(TABLE_NAME = 'Property' AND COLUMN_NAME = 'Longitude') OR
(TABLE_NAME = 'QualifyStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'QualifyStatus' AND COLUMN_NAME = 'StageNumber') OR
(TABLE_NAME = 'QualifyStatus' AND COLUMN_NAME = 'StageOrder') OR
(TABLE_NAME = 'QualifyStatus' AND COLUMN_NAME = 'StageInnerOrder') OR
(TABLE_NAME = 'QualifyStatus' AND COLUMN_NAME = 'IsFinal') OR
(TABLE_NAME = 'QuickAddMenuItem' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ReleasePriority' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ReleaseStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ReleaseType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'RemindInterval' AND COLUMN_NAME = 'Description') OR
(TABLE_NAME = 'RemindInterval' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'RemindInterval' AND COLUMN_NAME = 'Value') OR
(TABLE_NAME = 'RequestType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'RoleInServiceTeam' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ServiceCategory' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ServiceObjectType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ServiceStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Status' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'TimeUnit' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'TimeZone' AND COLUMN_NAME = 'Offset') OR
(TABLE_NAME = 'TimeZone' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'DayOfWeek' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'DayOfWeek' AND COLUMN_NAME = 'Number') OR
(TABLE_NAME = 'LMColumnTemplate' AND COLUMN_NAME = 'ColumnName') OR
(TABLE_NAME = 'LMStartEvent' AND COLUMN_NAME = 'ConditionData') OR
(TABLE_NAME = 'LMStartEvent' AND COLUMN_NAME = 'ChangedColumns') OR
(TABLE_NAME = 'LMStartEvent' AND COLUMN_NAME = 'MessageTemplate') OR
(TABLE_NAME = 'ListenerByNotifier' AND COLUMN_NAME = 'NotifierConnectionColumn') OR
(TABLE_NAME = 'DisplayDateFormat' AND COLUMN_NAME = 'Format') OR
(TABLE_NAME = 'SysProcessLog' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'SysProcessLog' AND COLUMN_NAME = 'DurationInMinutes') OR
(TABLE_NAME = 'SysProcessLog' AND COLUMN_NAME = 'DurationInHours') OR
(TABLE_NAME = 'SysProcessLog' AND COLUMN_NAME = 'DurationInDays') OR
(TABLE_NAME = 'SysProcessElementLog' AND COLUMN_NAME = 'Type') OR
(TABLE_NAME = 'SysProcessElementLog' AND COLUMN_NAME = 'Caption') OR
(TABLE_NAME = 'SysProcessElementLog' AND COLUMN_NAME = 'ErrorDescription') OR
(TABLE_NAME = 'SysProcessElementLog' AND COLUMN_NAME = 'DurationInMinutes') OR
(TABLE_NAME = 'SysProcessElementLog' AND COLUMN_NAME = 'DurationInHours') OR
(TABLE_NAME = 'SysProcessElementLog' AND COLUMN_NAME = 'DurationInDays') OR
(TABLE_NAME = 'FileType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'BulkEmailStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'BulkEmailStatus' AND COLUMN_NAME = 'IsActive') OR
(TABLE_NAME = 'LeadSource' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'LeadSource' AND COLUMN_NAME = 'Description') OR
(TABLE_NAME = 'Country' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Country' AND COLUMN_NAME = 'Image') OR
(TABLE_NAME = 'Country' AND COLUMN_NAME = 'BilingInfo') OR
(TABLE_NAME = 'QueueStatus' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'QueueStatus' AND COLUMN_NAME = 'IsInitial') OR
(TABLE_NAME = 'QueueStatus' AND COLUMN_NAME = 'IsFinal') OR
(TABLE_NAME = 'City' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Region' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'QueuePriority' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'QueuePriority' AND COLUMN_NAME = 'Value') OR
(TABLE_NAME = 'Calendar' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ContractState' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'ContractState' AND COLUMN_NAME = 'Position') OR
(TABLE_NAME = 'Tax' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Tax' AND COLUMN_NAME = 'Percent') OR
(TABLE_NAME = 'AddressType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'AddressType' AND COLUMN_NAME = 'ForContact') OR
(TABLE_NAME = 'AddressType' AND COLUMN_NAME = 'ForAccount') OR
(TABLE_NAME = 'RelationType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'RelationType' AND COLUMN_NAME = 'ForContactContact') OR
(TABLE_NAME = 'RelationType' AND COLUMN_NAME = 'ForAccountContact') OR
(TABLE_NAME = 'RelationType' AND COLUMN_NAME = 'ForContactAccount') OR
(TABLE_NAME = 'RelationType' AND COLUMN_NAME = 'ForAccountAccount') OR
(TABLE_NAME = 'SpecificationType' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'SpecificationType' AND COLUMN_NAME = 'Description') OR
(TABLE_NAME = 'Unit' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'Unit' AND COLUMN_NAME = 'ShortName') OR
(TABLE_NAME = 'QualifyStatus' AND COLUMN_NAME = 'Color') OR
(TABLE_NAME = 'OpportunityStage' AND COLUMN_NAME = 'Color') OR
(TABLE_NAME = 'QueueObjectColumn' AND COLUMN_NAME = 'Name') OR
(TABLE_NAME = 'QueueObjectColumn' AND COLUMN_NAME = 'Caption') OR
(TABLE_NAME = 'DuplicatesHistory' AND COLUMN_NAME = 'SchemaTableName');
UPDATE "SysAdminUnit"
SET "Name" = 'Supervisor_Current'
WHERE "Name" = 'Supervisor';
UPDATE "SysAdminUnit"
SET "Name" = 'Supervisor',
"UserPassword" = 'jqtZ3uiTDazZFoZRF32m0OQpxrt4V45R7yYXgd1jl6xddsoOOIwja',
"Active" = '1'
WHERE "Id" = '{7F3B869F-34F3-4F20-AB4D-7480A5FDF647}';
UPDATE "SysAdminUnit"
SET "Name" = 'Name '|| Rownum
WHERE "SysAdminUnitTypeValue" < 4;
--DBMS_OUTPUT.ENABLE(200000);
DECLARE
CURSOR cur IS
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM "TmpAnonimizationData";
expression VARCHAR2(500);
BEGIN
FOR cur_rec in cur
LOOP
BEGIN
execute immediate 'ALTER TABLE "' || cur_rec.TABLE_NAME || '" DISABLE ALL TRIGGERS';
expression := 'UPDATE "' || cur_rec.TABLE_NAME || '" ';
expression := expression || ' SET "' || cur_rec.COLUMN_NAME || '" = ';
IF ((cur_rec.TABLE_NAME = 'MailboxSynchronizationSettings') AND (cur_rec.COLUMN_NAME = 'UserPassword')) THEN
expression := expression || '''p0mzIa0Nfdo='' WHERE "' || cur_rec.COLUMN_NAME || '" IS NOT NULL';
ELSIF ((cur_rec.TABLE_NAME = 'SysMsgUserSettings') AND (cur_rec.COLUMN_NAME = 'ConnectionParams')) THEN
expression := expression || 'REPLACE("ConnectionParams", ''"disableCallCentre":false'', ''"disableCallCentre":true'')';
ELSIF ((cur_rec.DATA_TYPE = 'NVARCHAR2') OR (cur_rec.DATA_TYPE = 'VARCHAR2')) THEN
expression := expression || '''Name'' || SUBSTR("Id", 2, 8) WHERE "' || cur_rec.COLUMN_NAME || '" IS NOT NULL';
expression := expression || ' AND NOT (SUBSTR("' || cur_rec.COLUMN_NAME ||'",1,1) =''{'' ';
expression := expression || ' AND LENGTH("' || cur_rec.COLUMN_NAME ||'") =38 ) ';
ELSIF ( cur_rec.DATA_TYPE = 'NCLOB') THEN
expression := expression || '''DataName'' WHERE "' || cur_rec.COLUMN_NAME || '" IS NOT NULL';
ELSIF ((cur_rec.DATA_TYPE = 'DATE') OR (cur_rec.DATA_TYPE = 'TIMESTAMP')) THEN
expression := expression || '(SELECT sysdate + (SELECT CEIL(150*dbms_random.value(1,10)) from dual) from dual)' ;
expression := expression || ' WHERE "' || cur_rec.COLUMN_NAME || '" IS NOT NULL';
ELSIF (cur_rec.DATA_TYPE = 'NUMBER') THEN
expression := expression || '0 WHERE "' || cur_rec.COLUMN_NAME || '" IS NOT NULL';
ELSE
CONTINUE;
END IF;
--dbms_output.put_line(expression);
execute immediate(expression);
execute immediate 'ALTER TABLE "' || cur_rec.TABLE_NAME || '" ENABLE ALL TRIGGERS';
COMMIT;
END;
END LOOP;
END;
END;
/
CREATE OR REPLACE PROCEDURE tsp_AnonymizeAllData AS
schemaName VARCHAR(100);
ex_custom EXCEPTION;
baseLookupSchemaUId VARCHAR2(38) := '{11AB4BCB-9B23-4B6D-9C86-520FAE925D75}';
baseCodeLookupSchemaUId VARCHAR2(38) := '{2681062B-DF59-4E52-89ED-F9B7DC909AB2}';
BEGIN
SELECT SYS_CONTEXT('userenv', 'current_schema') INTO schemaName from DUAL WHERE ROWNUM=1;
BEGIN
IF regexp_instr(schemaName,'_ANONYMOUS') = 0 THEN
raise_application_error(-20001, 'Attempt to anonymize the data from the working database!!');
END IF;
EXCEPTION
WHEN ex_custom THEN
DBMS_OUTPUT.PUT_LINE(sqlerrm);
DBMS_OUTPUT.PUT_LINE(schemaName);
END;
DELETE FROM "TmpAnonimizationData";
INSERT INTO "TmpAnonimizationData" (TABLE_NAME,COLUMN_NAME,DATA_TYPE)
SELECT TAB_COLS.TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM "ALL_TAB_COLS" TAB_COLS
INNER JOIN "ALL_TABLES" TABLES ON TAB_COLS.TABLE_NAME=TABLES.TABLE_NAME AND TABLES.OWNER = schemaName
INNER JOIN (SELECT distinct "Name"
FROM "SysSchema"
WHERE "ManagerName" = 'EntitySchemaManager') SCHEMA ON SCHEMA."Name" = TABLES.TABLE_NAME
WHERE TAB_COLS.OWNER = schemaName
AND TABLES.TABLE_NAME NOT LIKE 'Vw%'
AND TAB_COLS.DATA_TYPE IN ('NUMBER', 'NVARCHAR2', 'VARCHAR2', 'DATE', 'TIMESTAMP', 'RAW', 'NCLOB')
AND TAB_COLS.COLUMN_ID IS NOT NULL
AND TAB_COLS.DATA_LENGTH <> 38
AND TAB_COLS.VIRTUAL_COLUMN <> 'YES'
AND (TABLES.TABLE_NAME NOT LIKE 'Sys%'
OR TABLES."TABLE_NAME" = 'SysMsgUserSettings')
AND TABLES.TABLE_NAME NOT LIKE 'QRTZ%'
AND TABLES.TABLE_NAME NOT IN ('OPPEmailInitialStatus')
AND NOT TABLES.TABLE_NAME IN (
SELECT "SysSchema"."Name"
FROM "SysLookup"
JOIN "SysSchema" ON "SysLookup"."SysEntitySchemaUId" = "SysSchema"."UId"
WHERE "SysSchema"."ManagerName" = 'EntitySchemaManager'
AND NOT EXISTS (
SELECT 1
FROM "SysModule"
INNER JOIN "SysModuleEntity" ON "SysModuleEntity"."Id" = "SysModule"."SysModuleEntityId"
WHERE "SysModuleEntity"."SysEntitySchemaUId" = "SysLookup"."SysEntitySchemaUId"))
AND "COLUMN_NAME" NOT IN('CreatedOn', 'ModifiedOn', 'Code','SchemaToSearchName', 'ContainerId', 'ModuleName', 'ProcessListeners');
DELETE FROM "TmpAnonimizationData"
WHERE COLUMN_NAME = 'Name'
AND EXISTS (SELECT 1 FROM "SysSchema"
WHERE "SysSchema"."Name" = TABLE_NAME
AND "ParentId" IN (
SELECT "Id" FROM "SysSchema"
WHERE "UId" IN(baseLookupSchemaUId,baseCodeLookupSchemaUId)));
tsp_DoDataAnonymization(schemaName);
END;
/
Инструкция:
Для работы со скриптом необходимо:
- Выполнить бэкап БД
- Выполнить импорт в новую схему с именем “имя старой схемы_ANONYMOUS”
- Выполнить скрипт tsp_AnonymizeAllData.sql создания процедур анонимизации БД.
- Запустить на выполнение процедуру
EXEC tsp_AnonymizeAllData