Разграничение прав доступа на уровне записей
nnov
Дата: 28.10.2005 17:12:42
Добрый вечер всем!
Пытаюсь написать систему электронного документооборота
клиент на Delphi БД Firebird с функциональностью вроде придумал как и что
а вот как организовать систему доступа. Понятно что на такой вопрос в
форуме не ответишь, меня интересуют ссылки на статьи по этой теме
присоветуйте кто, что видел.
Заранее спасибо.
ЗЫ. тип сервера неважен пока думаю над концепцией
LSV
Дата: 28.10.2005 19:01:56
Каждый выбирает для себя сам.... :)
ИМХО, надо делать разграничение на уровне приложения, т.к. на уровне сервера можно решить (за разумную затрату сил) только малую часть этих вопросов.
Пользователей собирать в группы. Права назначать на эти группы. Точно также поступать с разделяемыми сущностями:
Товары - в группы
Контрагентов - в группы
Документы с важными признаками - в группы
Найти запросом пересечение "ПользовательГруппа" и "КонтрагентГруппа" не составит труда ни для программиста ни для сервера. Можно ввести понятие "Public-признак" т.е. "доступен для всех групп пользователей" (если разделение прав пока не актуально). Постараться без нужды не плодить сущности и группы.
Создать удобный механизм изменения/копирования/объединения/исключения прав в группах.
Получится ОЧЕНЬ гибко и умеренно трудоёмко, вне зависимости от платформы на сервере и клиенте.
ИМХО, это единственный способ сделать безопасность и ПРОСТО и ГИБКО для систем с большим числом сущностей и сложными требованиями к безопасности.
Прошу не начинать флейм про права на сервере, аутентификацию и пр.
Тут нет "серебряной пули".
Гаджимурадов Рустам
Дата: 28.10.2005 19:34:28
nnov |
Разграничение прав доступа на уровне записей |
Нет такой возможности в сервере.
Делай на клиенте.
kdv
Дата: 28.10.2005 20:08:13
www.ibase.ru/devinfo/treedb2.htm
Мимопроходящий
Дата: 28.10.2005 20:12:34
Привет, kdv!
Ты пишешь:
kdv |
k> www.ibase.ru/devinfo/treedb2.htm |
Дмитрий!
Ты же уже должен быть мертвецки пьян! ;)
Присоединяюсь к поздравлениям в твой адрес.
Всех благ! По большей части, материальных.
--
With best regards, Мимопроходящий.
Posted via ActualForum NNTP Server 1.3
igorolv
Дата: 28.10.2005 20:42:11
Ограничение прав доступа на сервере надежнее. Если они сделаны на клиенте - защита "от дурака", то никто не мешает "злодею" открыть свое соединение с сервером (помимо клиента) и вперед менять данные :)
Речь идет о разграничении прав доступа НА УРОВНЕ ЗАПИСЕЙ (т.е. row-level security). Стандартных средств у серверов баз данных нет. Впрочем, система прав доступа для достаточно крупной информационной системы мощнее, чем предлагаемая серверами баз данных.
Кроме того, кроме ограничений x=1, x=2, могут быть ограничения и по времени работы с различными объектами информационной системы.
Один из возможных подходов - использование хранимых процедур. На выполнение хранимых процедур дать доступ пользователям, на таблицы -запретить.
В начале каждой хранимой процедуры сделать проверку - имеет ли вызвавший пользователь права на эту хранимую процедуру.
Проверку добавлять в начало процедуры, конечно же, не руками, а каким-либо автоматическим способом. Или, в крайнем случае, вызывать в начале хп другую хп, передавая туда название данной хп.
Результат проверки прав доступа может вернуть не просто "да" или "нет", а какое-либо условие (x=1). Результирующую выборку отфильтровать с использованием данного условия. И вернуть клиенту.
Calm
Дата: 31.10.2005 09:01:18
2 igorolv,
как-то срашновато звучит.
Скажите, вы использовали это в своих проектах? Сколько юзеров с различными правами у вас было?
автор |
Результат проверки прав доступа может вернуть не просто "да" или "нет", а какое-либо условие (x=1). Результирующую выборку отфильтровать с использованием данного условия. |
Попахивает Execute statement...
nnov
Дата: 31.10.2005 10:45:59
[quot igorolv]Ограничение прав доступа на сервере надежнее.
Из этих соображений я и решил порыть в данном направлении
до недавнего времени я работал в банке и обслуживал банковскую систему
где подобное было реализованно на Oracle правда при использовании коммерческой двоичной библиотеки.
Но принцип в следующем: права на таблицы только у админа пользователям даются права только на процедуры и вьюшки при запросе на выполнение процедуры или вызове VIEW проверяются права Права могли назначатся очень гибко на уровне документа и даже на уровне отдельных операций над документом. И что самое главное абсолютно неважно через какого клиента ты работаешь с данными.
Поэтому реализация на клиенте очень ненадежна. Подключи через ODBC в Access базу и правь данные как хочешь... Так непойдет, и тратить время на реализацию на клиенте безсмысленно это показуха, а не защита.
Я тут нашел неплохую статейку, но маловато еще бы таких примеров
www.delphiplus.org/articles/ib/only_for_your_eyes/index.html
kdv
Дата: 31.10.2005 11:13:29
я уже давал ссылку. не катит?
www.ibase.ru/devinfo/treedb2.htm
тут как раз в том числе упоминается мандатная защита Oracle и Linter.
nnov
Дата: 31.10.2005 11:28:30
я уже давал ссылку. не катит?
www.ibase.ru/devinfo/treedb2.htm
Нет хорошая статья я свою ссылку из нее и взял, спасибо, но хороших
статей много небывает. Просто я года два назад где-то читал
огромную статью если не ошибаюсь страниц на 100 где было
подробно рассмотренно работа с битовыми масками для вычисления конечных прав, различные варианты организации групп, как лучше организовывать защищаемые данные чтобы проще было назначать и раздавать права...
Тогда я прочитал и где-то посеял, а теперь ищю уже 4 день