Перейти к основному содержимому

Задание 2: Методы обфускации

Динамическое маскирование​

  1. Запустите psql и подключитесь к БД:

    [postgres@ServerName ~]$ psql -U postgres -d prod
    Pager is used for long output.
    Border style is 2.
    Line style is unicode.
    psql (15.5)
    Type "help" for help.
  2. Включите динамическое маскирование:

    postgres@prod=# SELECT anon.start_dynamic_masking();
    ┌───────────────────────┐
    │ start_dynamic_masking │
    ├───────────────────────┤
    │ t │
    └───────────────────────┘
    (1 row)

    Убедитесь, что появилась схема mask:

    postgres@prod=# \dn
    List of schemas
    ┌────────┬───────────────────┐
    │ Name │ Owner │
    ├────────┼───────────────────┤
    │ anon │ postgres │
    │ mask │ postgres │
    │ public │ pg_database_owner │
    └────────┴───────────────────┘
    (3 rows)
  3. Создайте пользователя и выдайте права на создание в схеме public:

    postgres@prod=# CREATE ROLE dbadmin WITH LOGIN;
    CREATE ROLE
    postgres@prod=# ALTER ROLE dbadmin WITH PASSWORD 'qwerty12';
    ALTER ROLE
    postgres@prod=# GRANT ALL ON SCHEMA public TO dbadmin;
    GRANT
  4. Из-под пользователя dbadmin создайте таблицу:

    postgres@prod=# \c - dbadmin
    You are now connected to database "prod" as user "dbadmin".
    dbadmin@prod=# CREATE TABLE public.people(
    id serial NOT NULL PRIMARY key,
    firstname TEXT,
    lastname TEXT,
    email TEXT,
    city TEXT,
    address TEXT,
    phone TEXT,
    balance numeric(17,2)
    );
    CREATE TABLE
    dbadmin@prod=# TABLE public.people;
    ┌────┬───────────┬──────────┬───────┬──────┬─────────┬───────┬─────────┐
    │ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
    ├────┼───────────┼──────────┼───────┼──────┼─────────┼───────┼─────────┤
    └────┴───────────┴──────────┴───────┴──────┴─────────┴───────┴─────────┘
    (0 rows)
  5. Заполните таблицу случайными персональными данными:

    dbadmin@prod=# WITH
    fname AS (SELECT oid,gender,COALESCE(val,'') first_name FROM anon.first_name),
    lname AS (SELECT oid,gender,COALESCE(val,'') last_name FROM anon.last_name),
    email AS (SELECT oid,COALESCE(val,'') email FROM anon.email),
    city AS (SELECT oid,val as city FROM anon.city),
    address AS (SELECT oid,COALESCE(val,'') addres FROM anon.address)
    INSERT INTO public.people(firstname,lastname,email,city,address,phone,balance)
    SELECT
    first_name
    ,last_name
    ,email
    ,city
    ,address
    ,format('+7 %1$s',substring(ceil(random()*1e12)::TEXT,1,10))
    ,(random()*1e5+3e3)::numeric(17,2)
    FROM fname
    NATURAL JOIN lname
    NATURAL JOIN email
    NATURAL JOIN city
    NATURAL JOIN address
    ORDER BY random() LIMIT 1e5;
    INSERT 0 343

    Полученная таблица:

    dbadmin@prod=# TABLE public.people LIMIT 5;
    ┌────┬───────────┬──────────┬──────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
    │ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
    ├────┼───────────┼──────────┼──────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
    │ 1 │ Jo │ Patrick │ boyerkrystal@example.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
    │ 2 │ Margaret │ Mccarthy │ brandon51@example.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
    │ 3 │ Tony │ Sims │ anna37@example.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
    │ 4 │ Angel │ Duran │ millsjoseph@example.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
    │ 5 │ Wayne │ Ayers │ mgates@example.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
    └────┴───────────┴──────────┴──────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
    (5 rows)
  6. Переключитесь на пользователя postgres:

    dbadmin@prod=# \c - postgres
    You are now connected to database "prod" as user "postgres".
  7. Выдайте необходимые права:

    postgres@prod=# GRANT USAGE ON SCHEMA mask TO dbadmin;
    GRANT
    postgres@prod=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA mask TO dbadmin;
    GRANT
    postgres@prod=# ALTER DEFAULT PRIVILEGES IN SCHEMA mask GRANT SELECT ON TABLES TO dbadmin;
    ALTER DEFAULT PRIVILEGES

Далее рассмотрим конкретные примеры методов маскирования. Исходный набор данных, лежащих в схеме public:

┌────┬───────────┬──────────┬──────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼──────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 1 │ Jo │ Patrick │ boyerkrystal@example.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
│ 2 │ Margaret │ Mccarthy │ brandon51@example.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
│ 3 │ Tony │ Sims │ anna37@example.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
│ 4 │ Angel │ Duran │ millsjoseph@example.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
│ 5 │ Wayne │ Ayers │ mgates@example.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
└────┴───────────┴──────────┴──────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
(5 rows)

Замаскированные данные при этом будут помещаться в одноименной таблице, но в схеме mask.

Фальсификация​

Переключитесь на пользователя dbadmin и сфальсифицируем данные в поле firstname:

postgres@prod=# \c - dbadmin
You are now connected to database "prod" as user "dbadmin".
dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.firstname IS 'MASKED WITH FUNCTION anon.fake_first_name()';
SECURITY LABEL

Запросим данные из маскированной таблицы:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬──────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼──────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 1 │ Yesenia │ Patrick │ boyerkrystal@example.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
│ 2 │ Bobby │ Mccarthy │ brandon51@example.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
│ 3 │ Larry │ Sims │ anna37@example.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
│ 4 │ Sally │ Duran │ millsjoseph@example.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
│ 5 │ Louis │ Ayers │ mgates@example.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
└────┴───────────┴──────────┴──────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
(5 rows)

Псевдонимизация​

Замаскируем поле lastname:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.lastname IS 'MASKED WITH FUNCTION anon.pseudo_last_name(lastname)';
SECURITY LABEL

Маскированная таблица:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬──────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼──────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 1 │ Ricardo │ Carlson │ boyerkrystal@example.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
│ 2 │ Harry │ Buckley │ brandon51@example.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
│ 3 │ Wanda │ Torres │ anna37@example.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
│ 4 │ Martha │ Neal │ millsjoseph@example.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
│ 5 │ Preston │ Greene │ mgates@example.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
└────┴───────────┴──────────┴──────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
(5 rows)

При следующем обращении к маскированной таблице будем получать одно и то же значение:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬──────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼──────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 1 │ Emily │ Carlson │ boyerkrystal@example.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
│ 2 │ Shelby │ Buckley │ brandon51@example.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
│ 3 │ Lori │ Torres │ anna37@example.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
│ 4 │ Randy │ Neal │ millsjoseph@example.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
│ 5 │ Dominique │ Greene │ mgates@example.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
└────┴───────────┴──────────┴──────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
(5 rows)

Рассмотрим пример с солью. Для этого в маскирование вводим произвольное значение, за счет чего получаем другой результат:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.lastname IS 'MASKED WITH FUNCTION anon.pseudo_last_name(lastname,$$ghdgfhd$$)';
SECURITY LABEL

Маскированная таблица изменилась:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬──────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼──────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 1 │ Kyle │ Russo │ boyerkrystal@example.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
│ 2 │ Dillon │ Boyle │ brandon51@example.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
│ 3 │ Shannon │ Frye │ anna37@example.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
│ 4 │ Leroy │ Murray │ millsjoseph@example.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
│ 5 │ Terry │ Schmitt │ mgates@example.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
└────┴───────────┴──────────┴──────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
(5 rows)

При использовании другой соли получаем изменение данных:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.lastname IS 'MASKED WITH FUNCTION anon.pseudo_last_name(lastname,$$wjz,do$$)';
SECURITY LABEL
dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬─────────────┬──────────┬──────────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼─────────────┼──────────┼──────────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 1 │ Christopher │ Todd │ boyerkrystal@example.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
│ 2 │ Erin │ Garza │ brandon51@example.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
│ 3 │ Renee │ Cameron │ anna37@example.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
│ 4 │ Johnny │ Dunn │ millsjoseph@example.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
│ 5 │ Michaela │ Trevino │ mgates@example.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
└────┴─────────────┴──────────┴──────────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
(5 rows)

Частичное маскирование​

Выполним маскирование поля email с электронными адресами:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.email IS 'MASKED WITH FUNCTION anon.partial_email(email)';
SECURITY LABEL

Маскированная таблица:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬───────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬───────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼───────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼───────────────┼─────────┤
│ 1 │ Mark │ Todd │ bo******@ex******.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 1697687341 │ 3169.77 │
│ 2 │ Mary │ Garza │ br******@ex******.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 4185665191 │ 3418.57 │
│ 3 │ Donna │ Cameron │ an******@ex******.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 7535498786 │ 3753.55 │
│ 4 │ Ann │ Dunn │ mi******@ex******.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 9858672324 │ 3985.87 │
│ 5 │ Andrea │ Trevino │ mg******@ex******.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 1264467555 │ 4264.47 │
└────┴───────────┴──────────┴───────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴───────────────┴─────────┘
(5 rows)

Добавим маскирование номера телефона:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.phone IS 'MASKED WITH FUNCTION anon.random_phone($$+7 XX$$)';
SECURITY LABEL

Полученная таблица с применением двух методов маскирования:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬───────────────────────┬───────────────────┬─────────────────────────────────────────────────────────────────┬────────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼───────────────────────┼───────────────────┼─────────────────────────────────────────────────────────────────┼────────────────┼─────────┤
│ 1 │ Marie │ Todd │ bo******@ex******.com │ Popemouth │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 XX194163708 │ 3169.77 │
│ 2 │ Amy │ Garza │ br******@ex******.com │ Port Ashley │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 XX866869092 │ 3418.57 │
│ 3 │ Jackson │ Cameron │ an******@ex******.net │ East Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 XX927837096 │ 3753.55 │
│ 4 │ Andrew │ Dunn │ mi******@ex******.org │ East Victoriatown │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 XX121036568 │ 3985.87 │
│ 5 │ Rick │ Trevino │ mg******@ex******.org │ Monicaville │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 XX255134318 │ 4264.47 │
└────┴───────────┴──────────┴───────────────────────┴───────────────────┴─────────────────────────────────────────────────────────────────┴────────────────┴─────────┘
(5 rows)

Добавим к маскированию также фальсификацию поля с названиями городов:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.city IS 'MASKED WITH FUNCTION anon.fake_city()';
SECURITY LABEL

Результирующая таблица будет иметь вид:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬───────────────────────┬─────────────────┬─────────────────────────────────────────────────────────────────┬────────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼───────────────────────┼─────────────────┼─────────────────────────────────────────────────────────────────┼────────────────┼─────────┤
│ 1 │ Glenda │ Todd │ bo******@ex******.com │ New John │ (188,"020 Martin Springs Suite 903, Cherylville, WA 25148") │ +7 XX974897040 │ 3169.77 │
│ 2 │ Nancy │ Garza │ br******@ex******.com │ East Robertland │ (576,"6762 Wolf Stravenue Apt. 081, West Thomasport, OH 01468") │ +7 XX799830592 │ 3418.57 │
│ 3 │ Rachael │ Cameron │ an******@ex******.net │ Lake Michelle │ (433,"88378 Donald Canyon, East Roberttown, VT 31812") │ +7 XX475657071 │ 3753.55 │
│ 4 │ Autumn │ Dunn │ mi******@ex******.org │ South Ronald │ (197,"399 Giles Circles Suite 059, New Nancy, DE 15985") │ +7 XX785894658 │ 3985.87 │
│ 5 │ Claudia │ Trevino │ mg******@ex******.org │ Jamesland │ (131,"8646 Gilbert Shores Suite 151, Port Jennifer, WV 21987") │ +7 XX158361030 │ 4264.47 │
└────┴───────────┴──────────┴───────────────────────┴─────────────────┴─────────────────────────────────────────────────────────────────┴────────────────┴─────────┘
(5 rows)

Статическое маскирование​

Осуществим статическую замену поля с адресами:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.address IS 'MASKED WITH VALUE $$CONFIDENTIAL$$';
SECURITY LABEL

Получена таблица:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬───────────────────────┬────────────────────┬──────────────┬────────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼───────────────────────┼────────────────────┼──────────────┼────────────────┼─────────┤
│ 1 │ Amy │ Todd │ bo******@ex******.com │ Andrewview │ CONFIDENTIAL │ +7 XX248436603 │ 3169.77 │
│ 2 │ Francisco │ Garza │ br******@ex******.com │ Herreraport │ CONFIDENTIAL │ +7 XX882242919 │ 3418.57 │
│ 3 │ Alicia │ Cameron │ an******@ex******.net │ South Vanessamouth │ CONFIDENTIAL │ +7 XX508102118 │ 3753.55 │
│ 4 │ Samantha │ Dunn │ mi******@ex******.org │ Philliphaven │ CONFIDENTIAL │ +7 XX422929663 │ 3985.87 │
│ 5 │ Dave │ Trevino │ mg******@ex******.org │ Port Kevinland │ CONFIDENTIAL │ +7 XX182747499 │ 4264.47 │
└────┴───────────┴──────────┴───────────────────────┴────────────────────┴──────────────┴────────────────┴─────────┘
(5 rows)

Маскирвоание как удаление значений из вывода​

Выполните запрос:

dbadmin@prod=# SECURITY LABEL FOR anon ON COLUMN public.people.balance IS 'MASKED WITH VALUE NULL';
SECURITY LABEL

Получим таблицу:

dbadmin@prod=# SELECT * FROM mask.people LIMIT 5;
┌────┬───────────┬──────────┬───────────────────────┬───────────────┬──────────────┬────────────────┬─────────┐
│ id │ firstname │ lastname │ email │ city │ address │ phone │ balance │
├────┼───────────┼──────────┼───────────────────────┼───────────────┼──────────────┼────────────────┼─────────┤
│ 1 │ Jodi │ Todd │ bo******@ex******.com │ Alexanderside │ CONFIDENTIAL │ +7 XX954292988 │ │
│ 2 │ Loretta │ Garza │ br******@ex******.com │ Robertsberg │ CONFIDENTIAL │ +7 XX522726918 │ │
│ 3 │ Elaine │ Cameron │ an******@ex******.net │ Wheelerville │ CONFIDENTIAL │ +7 XX703474272 │ │
│ 4 │ Curtis │ Dunn │ mi******@ex******.org │ Port Kevin │ CONFIDENTIAL │ +7 XX670653208 │ │
│ 5 │ Lisa │ Trevino │ mg******@ex******.org │ Simonville │ CONFIDENTIAL │ +7 XX710116982 │ │
└────┴───────────┴──────────┴───────────────────────┴───────────────┴──────────────┴────────────────┴─────────┘
(5 rows)

Подведем итоги​

Вопрос 1

Вопрос 1: Какой функцией включается динамическое маскирование?

Вопрос 2

Вопрос 2: В какой схеме располагаются замаскированные данные при динамическом маскировании?

Вопрос 3

Вопрос 3: Какой метод маскирования применяется в следующем примере?

SECURITY LABEL FOR anon ON COLUMN public.people.email IS 'MASKED WITH FUNCTION anon.fake_email()';