Skip to content
Snippets Groups Projects
Commit 118e4981 authored by Guilherme Carbonari Boneti's avatar Guilherme Carbonari Boneti
Browse files

Edit anonimizacao.md

parent b1023afb
No related branches found
No related tags found
No related merge requests found
...@@ -24,5 +24,80 @@ No entanto, mesmo após a remoção dos identificadores, invasores podem utiliza ...@@ -24,5 +24,80 @@ No entanto, mesmo após a remoção dos identificadores, invasores podem utiliza
- **Dados sintéticos** - **Dados sintéticos**
Informações geradas algoritmicamente sem conexão com eventos reais. São usados para criar conjuntos de dados artificiais ao invés de alterar ou expor o conjunto original. O processo envolve a criação de modelos estatísticos com base em padrões encontrados no conjunto original, utilizando desvio padrão, medianas, regressão linear ou outras técnicas estatísticas. Informações geradas algoritmicamente sem conexão com eventos reais. São usados para criar conjuntos de dados artificiais ao invés de alterar ou expor o conjunto original. O processo envolve a criação de modelos estatísticos com base em padrões encontrados no conjunto original, utilizando desvio padrão, medianas, regressão linear ou outras técnicas estatísticas.
## Postgres Dynamic masking
Ocultar dados sensíveis de um usuário "mascarado".
Você pode ocultar alguns dados de uma função (role) declarando essa função como `MASKED`. Outras funções continuarão acessando os dados originais.
### Mascaramento Dinâmico no PostgreSQL
Exemplo básico:
```sql
CREATE TABLE people ( id TEXT, firstname TEXT, lastname TEXT, phone TEXT);
INSERT INTO people VALUES ('T1','Sarah', 'Conor','0609110911');
SELECT * FROM people;
=# SELECT * FROM people;
id | firstname | lastname | phone
----+-----------+----------+------------
T1 | Sarah | Conor | 0609110911
(1 row)
```
**Passo 1:** Ativar o mecanismo de dynamic masking
```sql
=# CREATE EXTENSION IF NOT EXISTS anon CASCADE;
=# ALTER DATABASE foo SET anon.transparent_dynamic_masking TO true;
```
**Passo 2:** Declarar as regras de mascaramento
```sql
SECURITY LABEL FOR anon ON COLUMN people.name
IS 'MASKED WITH FUNCTION anon.dummy_last_name()';
SECURITY LABEL FOR anon ON COLUMN people.phone
IS 'MASKED WITH FUNCTION anon.partial(phone,2,$$******$$,2)';
```
**Passo 3:** Declarar um usuário mascarado com acesso de leitura
```sql
=# CREATE ROLE skynet LOGIN;
=# SECURITY LABEL FOR anon ON ROLE skynet IS 'MASKED';
GRANT pg_read_all_data to skynet;
```
**Passo 4:** Conectar-se com o usuário mascarado
```sql
=# \c - skynet
=> SELECT * FROM people;
id | firstname | lastname | phone
----+-----------+-----------+------------
T1 | Sarah | Stranahan | 06******11
(1 row)
```
### Princípios
- Você pode mascarar tabelas em múltiplos esquemas.
- Colunas geradas são respeitadas.
- Você pode aplicar Políticas de Segurança de Linha (RLS) a um papel mascarado.
- Uma regra de mascaramento pode quebrar a integridade dos dados. Por exemplo, você pode mascarar uma coluna com uma restrição UNIQUE, fazendo com que ela tenha o valor NULL. Cabe a você decidir se os usuários mascarados precisam de integridade de dados.
### Como desmascarar uma role
Simplesmente remova o rótulo de segurança assim:
```sql
SECURITY LABEL FOR anon ON ROLE bob IS NULL;
```
## Referências ## Referências
[1] https://www.imperva.com/learn/data-security/anonymization/ [1] https://www.imperva.com/learn/data-security/anonymization/
\ No newline at end of file [2] https://postgresql-anonymizer.readthedocs.io/en/latest/dynamic_masking/
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment