Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разделение прав на уровне записи / 7 сообщений из 7, страница 1 из 1
14.01.2004, 01:26
    #32375108
Stas Tristan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав на уровне записи
Сейчас пытаюсь сделать бизнес-логику будущего сервера.
Необходима следующая система привилегий:
Для каждой записи пользователь, ее добавивший, должен иметь возможность назначить:
- список пользователей, которые могут СМОТРЕТЬ эту запись.
- список пользователей, которые могут ИЗМЕНЯТЬ эту запись.
- список пользователей, которые могут УДАЛЯТЬ эту запись.
Причем интерфейс для этого - клиентский GUI, а вот храниться все эти установки должны на сервере - это раз. Два - сервер должен адекватно выполнять запросы в соответствии с этими привилегиями.

Например, юсер Иванов добавил 2 записи в таблицу EXAM_TABLE с такими привилегиями:
СМОТРЕТЬ, ИЗМЕНЯТЬ, УДАЛЯТЬ - только он, юсер Иванов. Предположим, что злоумышленник юсер Петров получил доступ к исходникам клиентского GUI, узнал что есть такая EXAM_TABLE и хочет просмотреть все записи этой таблицы, включая юсера Иванова. Он берет, из консоли логинится под своим именем и в консоли же посылает запрос к серверу: SELECT * FROM EXAM_TABLE. Так вот нужно, чтобы сервер выдал только записи Петрова (если они есть), то есть сервер должен на своей стороне решить (исходя из User & Password) - что кому выдавать.

Вопрос - какой-нибудь из серверов это умеет делать? Если нет, то имеет ли смысл проектировать трехзвенную структуру типа - клиент/сервер приложений/сервер баз данных?
Подскажите, в общем, что-нибудь.

Заранее спасибо всем ответившим!
...
Рейтинг: 0 / 0
14.01.2004, 10:33
    #32375305
f2f
f2f
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав на уровне записи
Да практически любой, которой может запретить доступ напрямую к таблице и дать доступ через представление. А если еще и хранимые процедуры поддерживаются, то и вовсе никаких проблем. Кроме накладных расходов на проверку прав, конечно.
...
Рейтинг: 0 / 0
14.01.2004, 11:05
    #32375362
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав на уровне записи
Можно реализовать собственный механизм привилегий на основе представлений и хранимых процедур. В Oracle также существует:
Fine Grained Access Control, или Детальный Контроль Доступа:
http://www.oracle.com/ru/oramag/august2001/index.html?dev_tkyte.html
Oracle Label Security
http://www.oracle.com/ru/oramag/augsept2003/index.html?general_label.html

Суть первого состоит в неявном добавлении к запросам условия, определенного в политике безопасности. Грубо говоря: при select, insert, update, delete (по выбору) к WHERE самим сервером дописывается условие, возвращаемое пользовательской функции.
...
Рейтинг: 0 / 0
14.01.2004, 12:11
    #32375479
Berg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав на уровне записи
А пользователь не заколебается после внесения КАЖДОЙ записи описывать что имеет право с ней делать КАЖДЫЙ другой пользователь?
...
Рейтинг: 0 / 0
14.01.2004, 12:11
    #32375481
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав на уровне записи
очень-очень для огранияения прав на добавление-удаление-изменение могут помочь триггеры before...
...
Рейтинг: 0 / 0
14.01.2004, 14:11
    #32375721
Stas Tristan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав на уровне записи
2Denis Popov - именно это неявное добавление к WHERE и нужно. Только вот Oracle это очень дорого.
Какой-нибудь из Open Source это поддерживает?
...
Рейтинг: 0 / 0
14.01.2004, 15:19
    #32375851
bas
bas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав на уровне записи
автор
Какой-нибудь из Open Source это поддерживает?

Наверное имелось в виду freeware?? Если так, то MySql, Interbase, но тогда нужно делать так:
1. Создать таблицу со связью с пользователями много-ко-многим и не давать права на этоу таблицы никому, в это связки поля: ид_твоей табл., ид_юзера и ид_права.
2. потом создаешь вьюшку, в кот. добавляешь в условие, только те узера у кого есть разрешение на просмотр.
create view as select
select * from <table> t, <n-n_table> nt
where nt.id_user = <id_cur_user> and nt.id_table = t.id_table
and nt.id_rights = <can_see>
3. создаешь тригеры на делит, апдейт и инсерт
4. пожинаешь лавры

З.Ы. Все уже было сказано ранее, я всего лишь подитожил.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Разделение прав на уровне записи / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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