Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Грамотная настройка ролей


Автор: former 11.3.2008, 12:02
БД Firebird 2.0 для доступа к которой используются компоненты FIBPlus.
Предполагается три уровня доступа (три роли): администратор, редакторы и пользователи.
В пустой БД одна таблица - "Типы устройств", редактировать которую могут только администратор и редактор. При добавлении записи в неё, создаются две таблицы: "Список изделий" и "Список параметров". В сою очередь, при добавлении записи в таблицу "Список изделий" создается ещё одна таблица "Характеристики".

Вопрос заключается в следующем. Как автоматически (Без использования менеджеров типа IBExpert) предоставлять права на создание/удаление/редактирование для каждой группы при создании таблиц, а так же генераторов, процедур, триггеров и индексов? Т.е., например, таблица "Характеристики", созданная при добавлении записи одним редактором в таблицу "Список изделий", могла быть отредактирована или удалена другим редактором вместе со связанными с нею триггером, генератором, процедурой и индексом. Или, например, если аналогичное проделывает админ БД (не SYSDBA), то редакторы могли бы удалить.

С клиент-серверными БД только начал работать. Посоветуйте, как грамотно организовать политику доступа и управления.

Автор: Deniz 11.3.2008, 13:06
Создавать/удалять объекты БД(таблицы, триггеры, процедуры и т.д.) во время работы программы не хорошо.
Проектировать БД надо сразу.
Раздача прав возможна на уровне БД grant/revoke, но если доступ к записи определяется из ее содержимого, то придется писать свою систему прав и анализировать это в бизнес логике. Логика может быть как на клиенте, так и на сервере, т.е. в хранимой процедуре.

Автор: former 11.3.2008, 13:19
Цитата(Deniz @  11.3.2008,  13:06 Найти цитируемый пост)
Создавать/удалять объекты БД(таблицы, триггеры, процедуры и т.д.) во время работы программы не хорошо.
Проектировать БД надо сразу.


Сам уже в этом убедился. Удобно конечно, но слишком много гемороя с правами.


Цитата(Deniz @  11.3.2008,  13:06 Найти цитируемый пост)
Раздача прав возможна на уровне БД grant/revoke, но если доступ к записи определяется из ее содержимого, то придется писать свою систему прав и анализировать это в бизнес логике. Логика может быть как на клиенте, так и на сервере, т.е. в хранимой процедуре.


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

Только вот наткнулся на такую же тему про пользователей.

Дело ещё в том, что я пробовал создавать/удалять объекты БД(таблицы, триггеры, процедуры и т.д.) разными пользователями, но ошибка всегда ссылалась на отсутствие прав на удаление индекса, а таблицы удалялись нормально.

Автор: Deniz 11.3.2008, 13:42
Цитата(former @  11.3.2008,  16:19 Найти цитируемый пост)
Сам уже в этом убедился. Удобно конечно, но слишком много гемороя с правами.
не так уж и много.
Ты сам даешь пользователю права на select а уже в программе/ХП определяешь должна попадать запись к пользователю или нет.
С insert/update/delete примерно тоже самое. Например, в триггере перед удалением проверяешь есть ли права у этого пользователя удалить эту запись, и если нет Exception.
Все таки я склоняюсь к бизнес-логике на хранимых процедурах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)