powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Row-Level Security, Row Security Policies
22 сообщений из 72, страница 3 из 3
Row-Level Security, Row Security Policies
    #39334631
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochsereginseregin5. Создать УНИВЕРСАЛЬНУЮ ФУНКЦИЮ, которая по ПРОМЕЖУТОЧНОЙ ТАБЛИЦЕ создает ВРЕМЕННОЕ ПРЕДСТАВЛЕНИЕ с уже встроенными ограничениями доступа к записям текущему пользователю

возникает вопрос, не кажется ли вам что это называется 3-tier оно же applicaiton server ?

зачем пинками заталкивать трехзвенку в SQL ?

Сервер приложения - тормозная прокладка, но это не тема топика. Где Вам удобно, там процедуры и вызывайте.

Использование Представления в SQL запросе планировщиком постгреса воспринимается прозрачно, Он подставляет в запрос таблицу напрямую, а условия отбора внутри Представления объединяет с условиями отбора запроса. Индексы выбирает исходя из совокупности условий выборки - выборка выполняется максимально быстро.

RLS в постгресе данные фильтрует, но проблема в напиcании универсальных RLS для всех пользователей - они к тому же будут тормозить выборки. А у меня в представлениях ограничения индивидуальные для каждого пользователя.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39334650
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЕсли организовать так как ты хочешь данная фича была бы бесполезной

потому что она не относится к безопасности, она относится к SELECT/VIEW и назыввать ее security - обман

Dimitry SibiryakovНет, нарушением security как раз будет выброс ошибки, подтверждающей, что запись
CLASS_ID=5 в природе существует.

ого!
ну тогда выброс ошибки нарушение PK unique constraint при insert с повторным ID - тоже нарушение безопасности, "подтверждающее, что запись ID=<<PK duplicate>> в природе существует."
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39334725
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МимопроходящийHello, Sereginseregin!
You wrote on 26 октября 2016 г. 16:39:06:

Sereginseregin> В Postgres простая команда CREATE TEMP VIEW, представление удаляется автоматически при закрытии сессии.а смысл?



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
-- создаем временное представление mytable_temp_acc_view
-- к таблице mytable
-- с доступными записями текущему пользователю SESSION_USER
SELECT create_temp_acc_view('mytable', SESSION_USER, 'read'); 
                                                                                         
-- Далее обращаемся к представлению для выборки доступных данных
SELECT 
    ...
FROM mytable_temp_acc_view
... ;


-- После закрытия сессии представление mytable_temp_acc_view самостоятельно исчезнет
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39334803
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochпотому что она не относится к безопасности, она относится к SELECT/VIEW и назыввать ее security - обман

ИМХО наоборот, важно не сообщать пользователю об ошибке по безопасности. Пользователю не положено (рискованно для безопасности системы) знать, что в БД существуют какие-то еще записи, которые ему недоступны.

1. Пользователь запросил данные - ему предоставили все доступные. Какие еще существуют записи в БД - ему знать не положено.
2. Пользователь решил добавить (изменить, удалить) данные в БД. Сохранились только те, которые ему положено сохранять. По остальным выдалось сообщение: "Данные с такими реквизитами в БД сохранить нельзя!" - о проблемах с безопасностью не должно быть ни слова!
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39334806
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ariochпотому что она не относится к безопасности, она относится к SELECT/VIEW и назыввать ее security - обман

ИМХО наоборот, важно не сообщать пользователю об ошибке по безопасности. Пользователю не положено (рискованно для безопасности системы) знать, что в БД существуют какие-то еще записи, которые ему недоступны.

1. Пользователь запросил данные - ему предоставили все доступные. Какие еще существуют записи в БД - ему знать не положено.
2. Пользователь решил добавить (изменить, удалить) данные в БД. Сохранились только те, которые ему положено сохранять. По остальным выдалось сообщение: "Данные с такими реквизитами в БД сохранить нельзя!" - о проблемах с безопасностью не должно быть ни слова!
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335428
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sereginsereginПользователь запросил данные - ему предоставили все доступные. Какие еще существуют записи в БД - ему знать не положено.

пользователь вообще не должен запускать IBExpert, а должен работать с пользовательским приложением, которое и обеспечит формирование правильных запросов теми или иными способами (хоть через VIEW и SP, хоть как угодно)

если же пользователь может создавать свои запросы ,то как проверить наличие невидимых данных он найдет - хоть через select count(*), хоть через update ... where ...
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335432
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,то как проверить наличие невидимых данных он найдет - хоть через select count(*), хоть через update ... where ...

да неужели. count(*) уже работает с неявным фильтром.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335433
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sereginsereginМимопроходящийHello, Sereginseregin!
You wrote on 26 октября 2016 г. 16:39:06:

пропущено...
а смысл?



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
-- создаем временное представление mytable_temp_acc_view
-- к таблице mytable
-- с доступными записями текущему пользователю SESSION_USER
SELECT create_temp_acc_view('mytable', SESSION_USER, 'read'); 
                                                                                         
-- Далее обращаемся к представлению для выборки доступных данных
SELECT 
    ...
FROM mytable_temp_acc_view
... ;

-- После закрытия сессии представление mytable_temp_acc_view самостоятельно исчезнет



Как-то это стрёмно, делать временные метаданные

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

CREATE GLOBAL TEMPORARY TABLE xxxx (......)
on commit delete rows
on first use ( insert into xxxxx select .... )
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335436
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

в топку.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335438
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисArioch,то как проверить наличие невидимых данных он найдет - хоть через select count(*), хоть через update ... where ...

да неужели. count(*) уже работает с неявным фильтром.

....если про это не забыли

в случае сервера, который count считает по индексамне троая саму таблицу - вполне могут забыть

а если не забудут - вот и получили случай, когда row-level invisibility резщко замедляет работу
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335442
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисArioch,

в топку.

да GTT вообще в топку

ни разу их не использовал - значит никому они и не нужны
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335444
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

что значит не забудут? Я тебе говорю по опыту. Мне помимо работы с Firebird, приходится одну прогу на Oracle поддерживать (не я её разрабатывал). Там используется RLS, поэтому я знаю о чём говорю. И кстати пару раз эта штука вынесла мне мозг, пока я не догадался, что у них на таблице политика стоит.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335446
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

нет GTT вещь полезная сама по себе, а вот твоё решение не очень. Временные вьюхи тоже отстой.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335511
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

вкусовщина
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335514
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисИ кстати пару раз эта штука вынесла мне мозг, пока я не догадался, что у них на таблице политика стоит

просто прекрасный aргумент в пользу реализаций выборки данных через abuse системы безопасности
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335519
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про аналогичную проверку через update ты, к слову, промолчал

равно ты скоре всего не проводил сравнение на Оракле select count(*) c индексированной большой таблицей с политикой частичной невидимости по неиндексированному полю и без политик вообще
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335520
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сравнение по скорости
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335522
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

тут дело опыта. Я тогда с ораклом мало знаком был. Теперь то в случае чего смотрю, а не висит ли на таблице политика.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335528
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochКак-то это стрёмно, делать временные метаданные

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

Симонов Денисвот твоё решение не очень

ну например вот тут бы она могла пригодиться - http://www.sql.ru/forum/1236092/

другой вопрос что любую задачу можно решать разными инструментами, и не факт что по совокупности этот был бы лучший

во всяком случай на мой взгляд это лучше, чем делать временный изменения метаданных

Хотя.....

Вы же в FB3 ввели разные неймспейсы, так ? Или я путаю ?

Почему бы не ввести неймспейсы connection-local и transaction-local ? тогда вышеупомянутая фишка Постгресса будет повторена без создания специфических расширений SQL-комманд.

Как для SET$CONTEXT есть области видимости "текущее соединение" кажется?
и аналогично сделать с неймспейсами.

create view CURRENT_CONNECTION.TEMPORARY_SELECT AS .....

при дисконнекте - само умирает вместе с неймспейсом
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335536
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисArioch,

тут дело опыта. Я тогда с ораклом мало знаком был. Теперь то в случае чего смотрю, а не висит ли на таблице политика.

Вот именно. Накапливая опыт с любым инструментом - изучаешь где в него заложили грабли.
Но это не аргумент, что сами грабли - это благо.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335542
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

AriochВы же в FB3 ввели разные неймспейсы, так ? Или я путаю ?

кто мы? Я разработкой FB не занимаюсь.

Если ты под неймспейсами подразумеваешь схемы, то нет их в FB 3.0. Дополнительный "неймспейс" сейчас только один - это пакеты.
...
Рейтинг: 0 / 0
Row-Level Security, Row Security Policies
    #39335544
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисArioch,

нет GTT вещь полезная сама по себе, а вот твоё решение не очень. Временные вьюхи тоже отстой.

Временные представления мне самому не нравятся, это костыль.
НО этот самый костыль позволяет делать самую быструю выборку с использованием индексов. Быстрее решения я не знаю!


Постоянные представления аналогичны RLS,
Для сотни ролей руками делать их сложно и работать они будут медленнее, потому что для каждой записи должны разжевать ограничения написанные на сотню ролей.

А временное представление создается с минимальным набором ограничений индивидуально для конкретного пользователя в конкретной сессии. Может получится делать постоянные представления для каждого пользователя, но это надо схемы (пространства имен) под каждого пользователя плодить - в оракле вроде так и есть, посмотрю еще как дальше развивать решение.
...
Рейтинг: 0 / 0
22 сообщений из 72, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Row-Level Security, Row Security Policies
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]