Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
> результирующие права - "логическое или" Да. Но есть исключения. Изначально все запрещено. Разрешено только то, что явно разрешено. На фоне этого можно вводить запреты. Запреты выше разрешений (как обычно :)). А в остальном - да, все складывается. > права формализовать Так и сделано. > для части объектов их полный набор не будет иметь смысла > но если приложение может различать типы объектов, это не так важно. Конечно > Хуже, если при этом нужно менять права всех связанных объектов Так и есть. Причем если самих объектов, на которые раздаются права "считанные миллионы", то связанных будут десятки миллионов. Но не все так страшно - есть "оперативный" и "архивный" куски. В архивном можно всех послать строить отчеты. Оперативный будет сравним по размеру с массивом объектов. То есть те же "считанные миллионы". Плохо то, что процедура архивирования необязательная и нечеткая, но можно и устрожить. > разделите понятия "тип доступа" и "права доступа" Не уверен, что правильно понял. Но доступы есть и ролевые, когда права на объекты даются приложению, и личные. Сейчас разговор только о личных. Хотя ролевые хранятся так же, но владельцы у них не пользователи. > Группы предпочтительнее Это и так понятно и к сути вопроса не относится. Прямой необходимости в них нет. Но они есть. > оперировать объектами только своей группы. Ага, перекрестные права между группами? Объяснить это пользователям не получилось :) > Изменения журналируются. Конечно. > ACL можно использовать для хранения исключений. И для исключений и для доступов. Вопрос не в этом. Вопрос в эффективных правах кучи пользователей на кучи объектов при массированной нагрузке. > Не в тему: классификаторы как организованы > (разнесены на логическом или физическом уровне)? Физически объект - одна таблица, классификаторы - ссылки типа ( Id int identity primary key TypeOf1_Id - классификатор 1 TypeOf2_Id - классификатор 2 TypeOf3_Id - классификатор 3 ) > накладно хранить достаточно большое Хранить - не вопрос. Вопрос - пересчитать при изменении политики доступа :( Особенно, когда вечером меняли, а утром 1000 пользователей ломанулась инфу смотреть. Считать на лету - уже не выход. Припирает. Решение с хранением ALC в лоб не прошло - на пике нагрузки это еще хуже, чем постоянно считать. Но потом, ессно, легшает. Но это уже никому не нада :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2004, 15:35 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
> Так и есть. Причем если самих объектов, на которые раздаются права > "считанные миллионы", то связанных будут десятки миллионов. Вот с этого места, пожалуйста, поподробнее. Есть некоторое количество объектов (O1, O2... On), включающих атрибуты (A1, A2... An), которые связаны с объектами (RO1, RO2... ROn), включающих атрибуты (...). Пусть изменились права доступа к объекту O1 (было RA1, стало RA2). Вопрос: как должны меняться права атрибутов (A1.. An) и связанных объектов (RO1... ROn) с их атрибутами? Если я правильно понимаю, связи - не уникальные? Т. е., нет гарантии, что с объектом RO2 связан только объект O2, а может быть связан и O1? А если меняются оба объекта (O1 и O2), отрабатываются все связи последовательно? > Но доступы есть и ролевые, когда права на объекты даются приложению, и > личные. Сейчас разговор только о личных. Хотя ролевые хранятся так же, но > владельцы у них не пользователи. Понятно. Я немного не то имел в виду. Если не всем и не всегда нужно проверять права доступа (например, некоторая часть пользователей не изменяет объекты, а только читает их), оправданно завести для этого признак, вне контекста прав. Флаг установлен - права не проверяются. Для ограничения доступа обязательно использовать права или можно обойтись более простым понятием (уровень доступа)? Другими словами, доступ всегда обязательно связан с изменениями объектов базы данных? > Вопрос в эффективных правах кучи пользователей на кучи объектов при > массированной нагрузке. А пользователей и объекты никак нельзя сгруппировать по каким-нибудь признакам? Т. е., перейти от персональных политик к групповым? > Физически объект - одна таблица, классификаторы - ссылки типа Ну, это уже хорошо. Хуже было бы при множественной классификации. ;) > Особенно, когда вечером меняли, а утром 1000 пользователей ломанулась инфу > смотреть. А какая вообще периодичность и частота изменений? А если так: есть процесс, который занимается тем, что вносит изменения (т. е., полагаем, что связи формализованы, объекты бд описаны и пр.). И количество запущенных процессов связано с а) временем суток, б) приоритетом задачи, в) количеством изменений, г) нагрузкой на приложение (...). Т. е., по сути это daemon, внешнее приложение (например, на C, чтобы быстрее; можно со своим методом доступа), которое всегда работает, просто с разной интенсивностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2004, 17:28 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
> Вот с этого места, пожалуйста, поподробнее. Есть некоторое количество Все сводится, в общем-то, к приведенному примеру. Просто наряду с O1 ( Id int identity primary key TypeOf1_Id - классификатор 1 TypeOf2_Id - классификатор 2 TypeOf3_Id - классификатор 3 ) Есть еще и O2 ( O1_Id ) И давать / не давать в доступ O2 надо исходя из прав на O1, на который ссылается O2. Связи эти... Частично постоянные, частично могут меняться. То есть сказать, что они постоянны я не могу. > Если не всем и не всегда нужно проверять права доступа Есть такое. Объект помечен специальным образом. Пометок может быть две. "Доступен всем" и "Недоступен всем". Первое очевидно - игнорируются все проверки, второе означает, что с объектом могут работать только специальные приложения. > обязательно использовать права или можно обойтись Где можно обойтись "категорией" - обходимся. Некоторые категории как раз и дают пользователю доступ ко всему. некоторые категории - к тому, чем он владеет. Но практическая польза с точки зрения ресурсов есть только от категории "полный доступ". > А пользователей и объекты никак нельзя сгруппировать по каким-нибудь > признакам? Т. е., перейти от персональных политик к групповым? И таким образом сократить число объектов? :) То есть свести разговор к началу? Когда железка еще справлялась? Так вопрос не в этом :) Вопрос - как работать на грани возможностей железки. > Хуже было бы при множественной классификации. ;) А есть разница? > А какая вообще периодичность и частота изменений? Случайно в общем случае. Некоторые надо делать сразу же. Некоторые - плановые - делаются во внерабочее время. Запреты, по идее, должны срабатывать сразу. > А если так: есть процесс, который занимается тем То есть таки хранить? И хранить именно в виде ACL? И - "скрипт" на изменение ACL объектов? Который работает "в идле системы"? Кстати, если есть понятие "сессия", то сессионные права - не самый худший вариант... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2004, 18:09 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
> Есть такое. Объект помечен специальным образом. Пометок может быть две. > "Доступен всем" и "Недоступен всем". Не, я не об этом. Понятия прав imho целесообразно использовать при _изменении_ объектов. А если нужно просто ограничить доступ, я бы разбил и объекты, и пользователей на категории (одни и те же). И показывал бы те объекты, числовой эквивалент которых (не id) меньше или равен (например) числовому идентификатору пользователя. Без затей. А вот если менять объекты, тогда проверка прав по полной схеме. Т. е., описывал бы одинаковым образом и пользователей, и объекты. > Где можно обойтись "категорией" - обходимся. Некоторые категории как раз и > дают пользователю доступ ко всему. Не, я снова не об этом. Права доступа - для _изменения_ объектов. Только. Уровень (категория) - для _ограничения_ доступа. Т. е., все объекты - read only, сравнивается только числовой эквивалент. >> Хуже было бы при множественной классификации. ;) > А есть разница? Конечно. Затратнее. > То есть таки хранить? Ага. > И хранить именно в виде ACL? А чем хуже атрибуты объектов? > И - "скрипт" на изменение Ну, скриптом я бы его уже не назвал. Приложение. С конфигом, логом и пр. > Кстати, если есть понятие "сессия", то сессионные права - не самый худший > вариант... Хм... а речь разве не о них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2004, 18:44 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Кстати, если есть понятие "сессия", то сессионные права - не самый худший > вариант... Хм... а речь разве не о них? Я уже перестал понимать о чем речь... кажется не я один :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 09:01 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
Вопрос был в балансе хранить / считать. Если права нарезаются лично и пообъектно, - однозначно хранить. В минусе ситуация с массовым перераспределением прав, но при такой организации доступа это может и не быть проблемой - никто, обычно, не думает о перерезке прав на файлы. Перезают права на каталоги. А это уже называется нарезкой прав, исходя из свойств объекта... Зачем хранить права на 1000 файлов, лежащих в одной папке, если права одинаковы? Но вот если права таки были применены для файлов одного каталога, а потом файлы переложили в другой каталог, то придется "потратиться" (в смысле ресурсов машины) и применить ко всем переложеным файлам права нового каталога. Примерно так выглядит "моя" проблема в применении к общепонятным терминам. В треде уже проскакивала тема компромиссного решения - не хранить права пользователей на объект постоянно, а формировать для каждой сессии временный набор доступных объектов в момент запуска сессии. Правда тут есть определенные сложности с тем, что же считать сессией. Этот способ, с одной стороны, частично решает проблемы затрат при многократном обращении к системе за расчетом доступных объектов - оно посчитано один раз при старте сессии. Появляется пикантная ситуация - права неизменны на все время сессии. Но это, действительно, можно описать как фичу. Но при таком подходе все равно при частом переоткрытии сессий (мы все еще думаем, что такое "сессия") затраты будут немаленькие. А в пределе способ сводится к простому хранению расчитанных прав пообъектно с контролем актуальности и пересчетом по мере обращения в случае утери актуальности... А насчет понимаемости... Была бы понимаемость - не было бы треда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 11:49 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
> мы все еще думаем, что такое "сессия" Время с момента авторизации до момента logout? > А в пределе способ сводится к простому хранению расчитанных прав пообъектно > с контролем актуальности и пересчетом по мере обращения в случае утери > актуальности. Вот-вот. И мне лично непонятно, чем Вам так нравится ACL. Кроме того, мне непонятно, почему процессы у Вас описаны ролями. Imho, это обычные пользователи, которым (возможно) разрешен мультиплицированный доступ (т. е., одновременный логин нескольких пользователей с одинаковыми параметрами). Если непременно нужно знать, что это автомат, проще завести соответствующий признак. А освободившиеся роли использовать по назначению. Ну, не верю я, что задача не решается группировкой пользователей (группы и роли) и описанием прав групп, ролей, владельцев и прочих. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 13:28 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
Хм. То guest_20040621ограничение доступа к объектам бд можно сделать комбинированным (т. е., используя ACL То guest_20040621мне лично непонятно, чем Вам так нравится ACL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 20:22 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
2All Не пост а сплошной геморой ))) 2 Crimean Ваше решение: "расчитывать какие объекты доступны пользователю" изначально вовлекло Вас в теперешние трудности. Правильное решение было бы: "хранить в атрибутах объекта какие роли (пользователи) имеют право на доступ к объекту" т.е. ACL это Вам указали в самом начале. Если у Вас сложная иерархия прав, с наследованием, можете попробовать использовать механизм IRF (Inherited Rights Filter) как в NDS для гибкого управления правами. Можете также попробовать реализировать мандатную защиту (MAC) или использовать ее елементы - доступ на уровне меток безопасности скомбинировав или нет ее с ACL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 22:08 |
|
||
|
Решение проблемы разделения доступа. Расчет в реалтайме или отложеный?
|
|||
|---|---|---|---|
|
#18+
Дружище member Crimean, пожалуйста, читайте внимательнее. Приводите цитату в контексте. Речь шла о том, что применять ACL можно для регистрации _исключений_. _Если такая необходимость [imho абсолютно теоретическая] есть_. А не строить политику доступа на ACL. Разница, надеюсь, понятна. > т.е. ACL это Вам указали в самом начале. Пожалуйста, возьмите калькулятор и умножьте 1000 пользователей на 1000000 объектов (по условиям задачи). А теперь умножьте это на 10 миллисекунд (очень оптимистично). Вы получите время, потраченное на заполнение ACL таблицы. Если при этом Вы все еще считаете ACL хорошим решением, - дискуссия imho смысла не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2004, 22:36 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1546220]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
190ms |
get topic data: |
13ms |
get first new msg: |
8ms |
get forum data: |
4ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 265ms |
| total: | 583ms |

| 0 / 0 |
