AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 11719
Accepted
Brian Mains
Brian Mains
Asked: 2012-01-27 12:56:53 +0800 CST2012-01-27 12:56:53 +0800 CST 2012-01-27 12:56:53 +0800 CST

Esfregando nomes por meio de consulta/lote SQL

  • 772

Temos informações sigilosas (nomes de pessoas) e estamos procurando colocar em prática um script para "esfregar" os nomes. Alguém criou um bom algoritmo para fazer isso, algo além de apenas fazer todos os sobrenomes "TEST" ou algo assim?

Obrigado.

sql-server sql-server-2008-r2
  • 3 3 respostas
  • 3782 Views

3 respostas

  • Voted
  1. Best Answer
    Brandon
    2012-01-27T14:23:23+08:002012-01-27T14:23:23+08:00

    Eu tive que fazer isso por motivos de NPI (informações não públicas) em um empregador anterior. Acabou embaralhando os campos em um script, já que um par nome / sobrenome não é NPI, a menos que esteja vinculado a outra coisa.

    Aqui está uma versão aproximada do script. Tempere a gosto. Além disso, isso pressupõe que você tenha nomes e sobrenomes em campos separados.

    CREATE TABLE #RandomData
    (
        DataID int not null,
        ID int not null,
        FirstName varchar(50),
        LastName varchar(50)
    )
    
    INSERT INTO #RandomData (ID, DataID)
    SELECT ROW_NUMBER() OVER (ORDER BY NEWID()), DataId FROM DataTable
    
    UPDATE r SET r.FirstName = x.FirstName
    FROM #RandomData r
    INNER JOIN (
        SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS ID, FirstName FROM DataTable
    ) x
        ON x.ID = r.ID
    
    UPDATE r SET r.LastName = x.LastName
    FROM #RandomData r
    INNER JOIN (
        SELECT ROW_NUMBER() OVER (ORDER BY NEWID()) AS ID, LastName FROM DataTable
    ) x
        ON x.ID = r.ID
    
    CREATE CLUSTERED INDEX PK_RandomData ON #RandomData
    (
        DataID asc
    )
    
    ALTER TABLE DataTable DISABLE TRIGGER ALL
    
    UPDATE dt 
        SET dt.FirstName = r.FirstName, 
        dt.LastName = r.LastName
    FROM DataTable dt
    INNER JOIN #RandomData r
        ON dt.DataId = r.DataId
    
    ALTER TABLE DataTable ENABLE TRIGGER ALL
    
    DROP TABLE #RandomData
    
    • 5
  2. JNK
    2012-01-27T13:42:40+08:002012-01-27T13:42:40+08:00

    Se você não deseja saber qual é o nome, mas por qualquer motivo deseja manter algo na tabela para esse registro, pode sempre usar apenas um hash do nome :

    UPDATE MyTable
    SET Name = HASHBYTES('SHA1', Name)
    

    Isso manterá um valor exclusivo para cada registro de nome, mas você não terá como saber qual é o nome. Você pode, no entanto, ver se um nome corresponde a um valor comparando uma entrada hash com o hash armazenado.

    Hashes criptográficos como este são uma maneira, então você pode criar um hash idêntico a partir de uma string de entrada idêntica, mas não determinar a string de entrada, mesmo que você saiba qual é o hash.

    • 4
  3. Francesco Mantovani
    2021-12-07T03:15:13+08:002021-12-07T03:15:13+08:00

    Sim, graças a esta função, nome e sobrenome como Jack Sparrow se tornará Dchv Dkiokmd e e-mail como [email protected] se tornará [email protected] :

    -------------------------------------------------
    
    --A view to give you Random Values
    CREATE VIEW dbo.random(value) AS SELECT RAND();
    
    GO
    -------------------------------------------------
    
    --Randomization Procedure
    CREATE FUNCTION dbo.fnRandomizedText (
    @OldValue AS VARCHAR(MAX)
    )RETURNS VARCHAR(MAX)
    
    BEGIN
    
      DECLARE @NewValue AS VARCHAR(MAX)
      DECLARE @nCount AS INT
      DECLARE @cCurrent AS CHAR(1)
      DECLARE @cScrambled AS CHAR(1)
      DECLARE @Random AS REAL
     
      SET @NewValue = ''
      SET @nCount = 0
       WHILE (@nCount <= LEN(@OldValue))
      BEGIN
        SELECT @Random = value FROM random
        SET @cCurrent = SUBSTRING(@OldValue, @nCount, 1)
         IF ASCII(@cCurrent) BETWEEN ASCII('a') AND ASCII('z')
           SET @cScrambled = CHAR(ROUND(((ASCII('z') - ASCII('a') - 1) * @Random + ASCII('a')), 0))
        ELSE IF ASCII(@cCurrent) BETWEEN ASCII('A') AND ASCII('Z')
           SET @cScrambled = CHAR(ROUND(((ASCII('Z') - ASCII('A') - 1) * @Random + ASCII('A')), 0))
        ELSE IF ASCII(@cCurrent) BETWEEN ASCII('0') AND ASCII('9')
           SET @cScrambled = CHAR(ROUND(((ASCII('9') - ASCII('0') - 1) * @Random + ASCII('0')), 0))
        ELSE
           SET @cScrambled = @cCurrent
    
        SET @NewValue = @NewValue + @cScrambled
        SET @nCount = @nCount + 1
    
      END
       RETURN LTRIM(RTRIM(@NewValue))
    END
    GO 
    -------------------------------------------------
    

    Você pode então atualizar suas tabelas assim.

    UPDATE my_Users_table SET UserName = dbo.fnRandomizedText(UserName), LoweredUserName = dbo.fnRandomizedText(LoweredUserName)
    
    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve