Как стать автором
Обновить
33
0

Пользователь

Отправить сообщение
Да, пытаться угадать — можно. И можно даже установить, правильно ли угадал:
SQL> select  name,  email  from client_info c where email = 'ivan@dom2.ru';
NAME	   EMAIL
---------- ---------------
Иван       ivan@xxxxx.com

Но это затруднительно, и для пресечения таких попыток можно использовать аудит.
Если роли нет, то увидеть полные данные невозможно. Если проверять в policy не роль, а CURRENT_USER и user создавший процедуру (с Definer Rights) имеет полный доступ, то и процедура будет иметь полный доступ.
Сбор статистики будет идти по реальным данным, предикаты работают с реальными данными и маскируются только при выводе.
SQL> select  name,  email  from client_info c where email like '%dom%';
NAME	   EMAIL
---------- ---------------
Иван       ivan@xxxxx.com
Скорее всего данные маскируются при выборке результата из курсора, врядли oracle решился сломать внутренние механизмы. Это скорее для клонок не участвующих в групповых операциях.
SQL> select count(*), email from test.client_info group by email;

  COUNT(*) EMAIL
---------- ---------------
	 1 ivan@xxxxx.com
	 1 ivan@xxxxx.com
они будут участвовать во всех операциях как закрытые или открытые в зависимости от наличия роли. Но это никак не влияет на колонки не упомянутые в policy.
Полные данные может увидеть только та сессия у которoй активна роль R_VIP. Даже владелец, без роли, полных данных не увидит.
lex parsimoniae, Бритва Оккама, 12-13 век
«Не следует привлекать новые сущности без крайней на то необходимости»
Тут уже тонкое различие в терминологии, я подразумевал «нормальный проект», в котором кол-во костылей все таки не зашкаливает. Цена сложности — это скорее цена не текущих мелких костылей, а все таки необоснованных проектных решений. Например притащить библиотеку с собственным менеджментом памяти ради функции подсчета факториала.
Технический долг это не совсем «цена сложности». Технический долг постояно накапливается в развивающемся проекте. Это незакрытые TODO, сделанные наспех костыли и т.д. Единственный способ уменьшить долг — тратить некоторое время на упрощение и чистку кода. Но тут, как и везде нужна мера :)
Спасибо, обязательно посмотрю
int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OK

Еще немного и С++ будет похож на смесь Brainfuck и PL/I
Основоной посыл статьи не в абсолютных цифрах :). Сортировка требует времени. В вашем случае это время больше, чем выгода от перестановки предикатов. Почему это так — для ответа на этот вопрос нужно смотреть листинги работы JIT, как это сделать.
В этой программе (на примитивном уровне) показывается работа SQL оптимизатора. Предикаты сортируются по селективности — чем меньше мы записей выберем с участием этого предиката, тем раньше мы должны его применить.
Если в app.java поправить
//27 строка
if(random.nextBoolean()) { finder = finder.withAmount(0, 0); } 
на 
if(random.nextBoolean()) { finder = finder.withAmount(0, 1000000); }
и 
//35 строка
if(random.nextBoolean()) { finder = finder.withCode(rr, rr + 5); }
на
if(random.nextBoolean() || true) { finder = finder.withCode(rr, rr + 5); }

мы ухудшим возможность отсечения ненужных строк по amount. Без сортировки предикатов amount так и останется первым и ухудшит общее время выполнения, а с сортировкой уйдет на вторую позицию.
Не провокационная, а на редкость полезная и познавательная :)
Помимо этого, даже, существуют статьи показывающие преимущества в скорости языков с компиляцией налету (JIT — Just-in-time compilation), таких как Java и C#. Сравнить последние мы оставим тем, кто считает их быстрыми, но мы объясним почему это не так
Небольшой пример, использующий динамическую генерацию кода и JIT: Ищем на java, оптимизация во время исполнения. За счет генераци «плана исполнения запроса» на лету и JIT, скорость получилась сравнимая со статической оптимизацией.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность