Исказить значение колонки [Oracle]
От: Kaifa Россия  
Дата: 11.03.19 07:25
Оценка:
в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?
Re: Исказить значение колонки [Oracle]
От: Dym On Россия  
Дата: 11.03.19 07:35
Оценка:
Здравствуйте, Kaifa, Вы писали:

K> есть идеи?

1. Почитать документацию
2. Сходить на курсы Oracle
3. Создать функцию (можно и пакет, если похожих изменений будет много):
create function get_fake_name(p_name in emloyee.name%type) return varchar2
is 
begin
  ... тут как-то изменить имя
  return <измененное имя>
end;

4. Потом в запросе вызвать функцию
select 
  get_fake_name(e.name) as name
  ..
from  
  emloyee e
Счастье — это Glück!
Отредактировано 11.03.2019 7:41 Dym On . Предыдущая версия .
Re: Исказить значение колонки [Oracle]
От: vsb Казахстан  
Дата: 11.03.19 07:37
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?


Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё. Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.

SHA-256 хеш поставит в соответствие одинаковые результаты для одинаковых фамилий, в то же время обратное преобразование невозможно. Для пущей безопасности рекомендую приписать к каждой фамилии перед вычислением хеша какую-нибудь секретную строку, чтобы они не могли перебором найти исходные значения, если вдруг увидят этот алгоритм. Секретную строку, естественно, впоследствии уничтожить.
Re[2]: Исказить значение колонки [Oracle]
От: Kaifa Россия  
Дата: 11.03.19 07:46
Оценка:
vsb>Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё. Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.

vsb>SHA-256 хеш поставит в соответствие одинаковые результаты для одинаковых фамилий, в то же время обратное преобразование невозможно. Для пущей безопасности рекомендую приписать к каждой фамилии перед вычислением хеша какую-нибудь секретную строку, чтобы они не могли перебором найти исходные значения, если вдруг увидят этот алгоритм. Секретную строку, естественно, впоследствии уничтожить.


это я как понимаю тоже не реализовать чисто запросом? внутри пакета надо делать?
Re[3]: Исказить значение колонки [Oracle]
От: Dym On Россия  
Дата: 11.03.19 07:57
Оценка: 2 (1)
Здравствуйте, Kaifa, Вы писали:

K>это я как понимаю тоже не реализовать чисто запросом? внутри пакета надо делать?

Что реализовать? Посмотри пакет DBMS_CRYPTO
Счастье — это Glück!
Re[3]: Исказить значение колонки [Oracle]
От: vsb Казахстан  
Дата: 11.03.19 07:59
Оценка: 2 (1)
Здравствуйте, Kaifa, Вы писали:

K>это я как понимаю тоже не реализовать чисто запросом? внутри пакета надо делать?


Думаю, да, нужно функцию делать или внешнюю программу, как удобней. Может и с подзапросами получится, если в оракле есть все нужные функции, но я сомневаюсь, там всё обычно убогое. Я бы на джаве программку написал и всё. Ну или хранимку на джаве, если нужно именно запросом.
Отредактировано 11.03.2019 8:01 vsb . Предыдущая версия .
Re[2]: Исказить значение колонки [Oracle]
От: Pavel Dvorkin Россия  
Дата: 11.03.19 08:09
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё.


А со временем появится в БД некий Неуважай-Корыто, которого раньше не было. Каждый раз всю базу проходить ?

>Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.


Все, что ТС нужно — это сделать некое преобразование, без надежного шифрования. "просто чтобы невооруженным глазом не понять что за фио". Самое простое — base64

https://stackoverflow.com/questions/3804279/base64-encoding-and-decoding-in-oracle
With best regards
Pavel Dvorkin
Re: Исказить значение колонки [Oracle]
От: alexsmirnoff  
Дата: 11.03.19 08:11
Оценка: 3 (1) +2
Здравствуйте, Kaifa, Вы писали:

K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?


Табельные номера вместо ФИО подставлять.
Или ещё какие номера, ID из базы, например.
Re[3]: Исказить значение колонки [Oracle]
От: vsb Казахстан  
Дата: 11.03.19 08:12
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

vsb>>Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё.


PD>А со временем появится в БД некий Неуважай-Корыто, которого раньше не было. Каждый раз всю базу проходить ?


Зачем? Появится и появится. Станет Сиволапенко. Требования того, чтобы разные фамилии преобразовывались в разные фамилии, не было. Только то, чтобы одинаковые фамилии преобразовывались в одинаковые.

>>Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.


PD>Все, что ТС нужно — это сделать некое преобразование, без надежного шифрования. "просто чтобы невооруженным глазом не понять что за фио". Самое простое — base64


Не вижу смысла делать ненадёжно то, что можно сделать надёжно с теми же усилиями. Но дело не моё, конечно. Если база ценная, так и утекут данные, base64 любой дурак распознает.
Отредактировано 11.03.2019 8:13 vsb . Предыдущая версия .
Re[4]: Исказить значение колонки [Oracle]
От: Pavel Dvorkin Россия  
Дата: 11.03.19 08:39
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Зачем? Появится и появится. Станет Сиволапенко. Требования того, чтобы разные фамилии преобразовывались в разные фамилии, не было. Только то, чтобы одинаковые фамилии преобразовывались в одинаковые.


Тогда я не понял, зачем список составлять.

PD>>Все, что ТС нужно — это сделать некое преобразование, без надежного шифрования. "просто чтобы невооруженным глазом не понять что за фио". Самое простое — base64


vsb>Не вижу смысла делать ненадёжно то, что можно сделать надёжно с теми же усилиями. Но дело не моё, конечно. Если база ценная, так и утекут данные, base64 любой дурак распознает.


Несомненно, но требования ТС не включает надежное шифрование.
With best regards
Pavel Dvorkin
Re[5]: Исказить значение колонки [Oracle]
От: vsb Казахстан  
Дата: 11.03.19 09:54
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

vsb>>Зачем? Появится и появится. Станет Сиволапенко. Требования того, чтобы разные фамилии преобразовывались в разные фамилии, не было. Только то, чтобы одинаковые фамилии преобразовывались в одинаковые.


PD>Тогда я не понял, зачем список составлять.


Чтобы был список каких-то фамилий, похожих на человеческие. Можно в интернете скачать какую-нибудь базу фамилий, можно, конечно, и рандомные слова использовать, но когда всё похоже на правду, работать проще.
Re[6]: Исказить значение колонки [Oracle]
От: Pavel Dvorkin Россия  
Дата: 11.03.19 10:08
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Чтобы был список каких-то фамилий, похожих на человеческие. Можно в интернете скачать какую-нибудь базу фамилий, можно, конечно, и рандомные слова использовать, но когда всё похоже на правду, работать проще.


Ну не знаю. Автор вроде об этом не просил.
With best regards
Pavel Dvorkin
Re[4]: Исказить значение колонки [Oracle]
От: Kaifa Россия  
Дата: 11.03.19 16:21
Оценка:
K>>это я как понимаю тоже не реализовать чисто запросом? внутри пакета надо делать?
DO>Что реализовать? Посмотри пакет DBMS_CRYPTO

да. спасибо. уже нагуглил. на производительность пофигу, т.к. одноразово )
Re[4]: Исказить значение колонки [Oracle]
От: Kaifa Россия  
Дата: 11.03.19 16:26
Оценка:
vsb>Не вижу смысла делать ненадёжно то, что можно сделать надёжно с теми же усилиями. Но дело не моё, конечно. Если база ценная, так и утекут данные, base64 любой дурак распознает.

да че там ценного? фио специалистов занятых в проекте по sam146 и номера их предложений по улучшению
как и положено в РФ — засекретим какую-нить хрень (нахрен никому не упершуюся. типа этой) зато остальное — бери — не хочу из открытого доступа. носи на флешках и т.д. и т.п.. а вот всякие техпроцессы, ноу-хау и т.п. — в открытом доступе. дурка короче.
Re: Исказить значение колонки [Oracle]
От: Слава  
Дата: 11.03.19 16:42
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?


1) Можно сделать выгрузку и потом её обработать её нужные поля хоть где, на C# например
2) Можно сделать набор view, которые будут выдавать те же поля, но преобразованные.

Преобразование, обработка полей: шифровать их значения каким-нибудь AES или DES, затем получившиеся байты кодировать в base64 и отдавать наружу.

Нет никакого смысла изобретать специальное недошифрование.
Re: Исказить значение колонки [Oracle]
От: Masterspline  
Дата: 12.03.19 07:03
Оценка:
K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?

Отдавать первичный ключ колонки (id) вместо ФИО.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.