в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?
Здравствуйте, 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
Здравствуйте, Kaifa, Вы писали:
K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?
Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё. Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.
SHA-256 хеш поставит в соответствие одинаковые результаты для одинаковых фамилий, в то же время обратное преобразование невозможно. Для пущей безопасности рекомендую приписать к каждой фамилии перед вычислением хеша какую-нибудь секретную строку, чтобы они не могли перебором найти исходные значения, если вдруг увидят этот алгоритм. Секретную строку, естественно, впоследствии уничтожить.
vsb>Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё. Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.
vsb>SHA-256 хеш поставит в соответствие одинаковые результаты для одинаковых фамилий, в то же время обратное преобразование невозможно. Для пущей безопасности рекомендую приписать к каждой фамилии перед вычислением хеша какую-нибудь секретную строку, чтобы они не могли перебором найти исходные значения, если вдруг увидят этот алгоритм. Секретную строку, естественно, впоследствии уничтожить.
это я как понимаю тоже не реализовать чисто запросом? внутри пакета надо делать?
Здравствуйте, Kaifa, Вы писали:
K>это я как понимаю тоже не реализовать чисто запросом? внутри пакета надо делать?
Что реализовать? Посмотри пакет DBMS_CRYPTO
Здравствуйте, Kaifa, Вы писали:
K>это я как понимаю тоже не реализовать чисто запросом? внутри пакета надо делать?
Думаю, да, нужно функцию делать или внешнюю программу, как удобней. Может и с подзапросами получится, если в оракле есть все нужные функции, но я сомневаюсь, там всё обычно убогое. Я бы на джаве программку написал и всё. Ну или хранимку на джаве, если нужно именно запросом.
Здравствуйте, vsb, Вы писали:
vsb>Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё.
А со временем появится в БД некий Неуважай-Корыто, которого раньше не было. Каждый раз всю базу проходить ?
>Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.
Все, что ТС нужно — это сделать некое преобразование, без надежного шифрования. "просто чтобы невооруженным глазом не понять что за фио". Самое простое — base64
Здравствуйте, Kaifa, Вы писали:
K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?
Табельные номера вместо ФИО подставлять.
Или ещё какие номера, ID из базы, например.
Здравствуйте, Pavel Dvorkin, Вы писали:
vsb>>Составляешь словарь ФИО. Просто список всех возможных фамилий, имён и отчеств. Можешь тупо со своей базы вытащить всё.
PD>А со временем появится в БД некий Неуважай-Корыто, которого раньше не было. Каждый раз всю базу проходить ?
Зачем? Появится и появится. Станет Сиволапенко. Требования того, чтобы разные фамилии преобразовывались в разные фамилии, не было. Только то, чтобы одинаковые фамилии преобразовывались в одинаковые.
>>Считаешь sha-256 хеш от каждого компонента (например фамилии). Берёшь остаток от деления этого хеша на размер списка фамилий, это и есть результирующая фамилия. И так для каждого компонента.
PD>Все, что ТС нужно — это сделать некое преобразование, без надежного шифрования. "просто чтобы невооруженным глазом не понять что за фио". Самое простое — base64
Не вижу смысла делать ненадёжно то, что можно сделать надёжно с теми же усилиями. Но дело не моё, конечно. Если база ценная, так и утекут данные, base64 любой дурак распознает.
Здравствуйте, vsb, Вы писали:
vsb>Зачем? Появится и появится. Станет Сиволапенко. Требования того, чтобы разные фамилии преобразовывались в разные фамилии, не было. Только то, чтобы одинаковые фамилии преобразовывались в одинаковые.
Тогда я не понял, зачем список составлять.
PD>>Все, что ТС нужно — это сделать некое преобразование, без надежного шифрования. "просто чтобы невооруженным глазом не понять что за фио". Самое простое — base64
vsb>Не вижу смысла делать ненадёжно то, что можно сделать надёжно с теми же усилиями. Но дело не моё, конечно. Если база ценная, так и утекут данные, base64 любой дурак распознает.
Несомненно, но требования ТС не включает надежное шифрование.
Здравствуйте, Pavel Dvorkin, Вы писали:
vsb>>Зачем? Появится и появится. Станет Сиволапенко. Требования того, чтобы разные фамилии преобразовывались в разные фамилии, не было. Только то, чтобы одинаковые фамилии преобразовывались в одинаковые.
PD>Тогда я не понял, зачем список составлять.
Чтобы был список каких-то фамилий, похожих на человеческие. Можно в интернете скачать какую-нибудь базу фамилий, можно, конечно, и рандомные слова использовать, но когда всё похоже на правду, работать проще.
Здравствуйте, vsb, Вы писали:
vsb>Чтобы был список каких-то фамилий, похожих на человеческие. Можно в интернете скачать какую-нибудь базу фамилий, можно, конечно, и рандомные слова использовать, но когда всё похоже на правду, работать проще.
vsb>Не вижу смысла делать ненадёжно то, что можно сделать надёжно с теми же усилиями. Но дело не моё, конечно. Если база ценная, так и утекут данные, base64 любой дурак распознает.
да че там ценного? фио специалистов занятых в проекте по sam146 и номера их предложений по улучшению
как и положено в РФ — засекретим какую-нить хрень (нахрен никому не упершуюся. типа этой) зато остальное — бери — не хочу из открытого доступа. носи на флешках и т.д. и т.п.. а вот всякие техпроцессы, ноу-хау и т.п. — в открытом доступе. дурка короче.
Здравствуйте, Kaifa, Вы писали:
K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?
1) Можно сделать выгрузку и потом её обработать её нужные поля хоть где, на C# например
2) Можно сделать набор view, которые будут выдавать те же поля, но преобразованные.
Преобразование, обработка полей: шифровать их значения каким-нибудь AES или DES, затем получившиеся байты кодировать в base64 и отдавать наружу.
Нет никакого смысла изобретать специальное недошифрование.
K>в таблице есть колонка с полным ФИО сотрудников. требуется при выборке из таблицы искажать значение этого поля (ну не то чтобы супер-пупер шифрование, просто чтобы невооруженным глазом не понять что за фио — выгрузка будет передана каким-то внешним аналитикам). При этом чтобы одинаковые ФИО генерировали одинаковый набор символов в выборке. есть идеи?