|
Разделение прав на уровне записи
|
|||
---|---|---|---|
#18+
Сейчас пытаюсь сделать бизнес-логику будущего сервера. Необходима следующая система привилегий: Для каждой записи пользователь, ее добавивший, должен иметь возможность назначить: - список пользователей, которые могут СМОТРЕТЬ эту запись. - список пользователей, которые могут ИЗМЕНЯТЬ эту запись. - список пользователей, которые могут УДАЛЯТЬ эту запись. Причем интерфейс для этого - клиентский GUI, а вот храниться все эти установки должны на сервере - это раз. Два - сервер должен адекватно выполнять запросы в соответствии с этими привилегиями. Например, юсер Иванов добавил 2 записи в таблицу EXAM_TABLE с такими привилегиями: СМОТРЕТЬ, ИЗМЕНЯТЬ, УДАЛЯТЬ - только он, юсер Иванов. Предположим, что злоумышленник юсер Петров получил доступ к исходникам клиентского GUI, узнал что есть такая EXAM_TABLE и хочет просмотреть все записи этой таблицы, включая юсера Иванова. Он берет, из консоли логинится под своим именем и в консоли же посылает запрос к серверу: SELECT * FROM EXAM_TABLE. Так вот нужно, чтобы сервер выдал только записи Петрова (если они есть), то есть сервер должен на своей стороне решить (исходя из User & Password) - что кому выдавать. Вопрос - какой-нибудь из серверов это умеет делать? Если нет, то имеет ли смысл проектировать трехзвенную структуру типа - клиент/сервер приложений/сервер баз данных? Подскажите, в общем, что-нибудь. Заранее спасибо всем ответившим! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2004, 01:26 |
|
Разделение прав на уровне записи
|
|||
---|---|---|---|
#18+
Да практически любой, которой может запретить доступ напрямую к таблице и дать доступ через представление. А если еще и хранимые процедуры поддерживаются, то и вовсе никаких проблем. Кроме накладных расходов на проверку прав, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2004, 10:33 |
|
Разделение прав на уровне записи
|
|||
---|---|---|---|
#18+
Можно реализовать собственный механизм привилегий на основе представлений и хранимых процедур. В 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 самим сервером дописывается условие, возвращаемое пользовательской функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2004, 11:05 |
|
Разделение прав на уровне записи
|
|||
---|---|---|---|
#18+
А пользователь не заколебается после внесения КАЖДОЙ записи описывать что имеет право с ней делать КАЖДЫЙ другой пользователь? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2004, 12:11 |
|
Разделение прав на уровне записи
|
|||
---|---|---|---|
#18+
очень-очень для огранияения прав на добавление-удаление-изменение могут помочь триггеры before... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2004, 12:11 |
|
Разделение прав на уровне записи
|
|||
---|---|---|---|
#18+
2Denis Popov - именно это неявное добавление к WHERE и нужно. Только вот Oracle это очень дорого. Какой-нибудь из Open Source это поддерживает? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2004, 14:11 |
|
Разделение прав на уровне записи
|
|||
---|---|---|---|
#18+
автор Какой-нибудь из 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. пожинаешь лавры З.Ы. Все уже было сказано ранее, я всего лишь подитожил. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2004, 15:19 |
|
|
start [/forum/topic.php?fid=32&fpage=174&tid=1546676]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 409ms |
0 / 0 |