Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / раздача прав доступа на отдельные строки таблиц / 8 сообщений из 8, страница 1 из 1
28.04.2005, 14:22
    #33040525
джанкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
CREATE TABLE users (
       user_id              int4,
       name                 varchar
);

CREATE TABLE objects (
       obj_id               int4,
       name                 varchar
);

CREATE TABLE acl_view (
       user_id              int4,
       obj_id               int4,
       author_id            int4,
       grant                bool
);

CREATE TABLE acl_delete (
       user_id              int4,
       obj_id               int4,
       author_id            int4,
       grant                bool
);

CREATE TABLE acl_update (
       user_id              int4,
       obj_id               int4,
       author_id            int4,
       grant                bool
);

CREATE TABLE acl_insert (
       user_id              int4,
       obj_id               int4,
       grant                bool
);

CREATE TABLE customers (
       customer_id          int4,
       author_id            int4,
       name                 varchar,
       phone                varchar
);

Права доступа назначаются каждому пользователю следующим образом: в таблицы acl_view, acl_insert, acl_update, acl_delete вносится следующая информация:

 user_id – id пользователя которому назначаются права доступа
 obj_id – id таблицы для которой назначаются права доступа пользователю
 author_id – id пользователя – автора просматриваемой / изменяемой / удаляемой записи
 grant – определяет право (true/false)


При поле grant = NULL у пользователя есть право выполнения операций над строками внесёнными любым пользователем.

Каждая таблица должна иметь поле author_id, которое определяет автора каждой записи.

Например при просмотре таблицы на значается фильтр по author_id при помощи функции которая возвращает id пользователей. примерно так:
Код: plaintext
SELECT * FROM customers WHERE author_id IN (get_users_list('customers'));

Разумеется все обращения к таблицам выполняются через функции и представления.

Как вам такой вариант решения данной проблемы?

ЗЫ Критика и советы обязательны
...
Рейтинг: 0 / 0
28.04.2005, 17:48
    #33041363
Hordi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
ИМХО попытка перенести клиентскую логику на сервер БД. Вариант рабочий, точнее другого особо и не придумаешь. По мне так слишком геморно. На больших таблицах тормоза будут недетские. Но если нужно, то почему бы и нет... В качестве рекомендации советую добавлять поле не владельца строки, а некой группы, в которую данный владелец может входить - так можно сделать доступ на одну строку нескольких пользователей.
...
Рейтинг: 0 / 0
29.04.2005, 04:06
    #33041924
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
Поддерживаю Hordi в том, что авторство записи надо делать на группу и права раздавать тоже на группы (авторство удобнее задавать не какой-то группой куда входит пользователь, а фиктивной группой доступа, определяемой по атрибутам записи или самим человеком). Пусть даже первое время придётся делать отдельную группу на каждого пользователя, но иначе при росте системы до 500-1000 пользователей администрировать огромное число записей acl будет не по силам, да и размер офигенный получится.
А вот насчет выноса проверки доступа на клиента не согласен - разграничение доступа относится к данным и ИМХО должно производится как можно ближе к ним.
...
Рейтинг: 0 / 0
29.04.2005, 10:03
    #33042122
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
может 1 - все acl_* в одну таблицу +поле тип доступа
Может 2 - набор прав в стиле линуха, для владельца, для группы, для других ?
...
Рейтинг: 0 / 0
29.04.2005, 10:52
    #33042254
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
Почему бы четыре таблицы acl_* не объеденить в одну добавив поле action_id? (1 - select, 2 - insert, 3 - update, 4 - delete)

Не потребуется ли устанавливать права на конкретные строки? :-О

джанкерПри поле grant = NULL у пользователя есть право выполнения операций над строками внесёнными любым пользователем.Дефолты наверное правильнее сделать так:

grants
- user_id # not null
- author_id
- object_id
- action_id # not null
- grant # not null

При author_id IS NULL и object_id IS NULL и row_id IS NULL юзер имеет такой грант на такое действие на все строки во всех объектах. Строки с author_id IS NOT NULL имеют более высокий приоритет и обозначают права этого юзера на все строки во всех объектах этого автора. Самый высокий - со всеми полями NOT NULL.

Проверка тогда должна быть основана на бырорке "select ... where ( author_id = ? or author_id is null ) and ( object_id = ? or object_id is null )", из которой выбирается строка с наибольшим приритетом. (Может быть даже средствами SQL типа "order by author_id not null desc limit 1".)

P.S.: Может быть назначать права не на "физические" операции - с таблицами БД, а на "логические" - над объектами, которые там хранятся? (Допустим в БД есть таблица объектов, и таблица свойств этих объектов. Допустим, из логической модели системы следует, что юзер может иметь "логические" права на объекты автора, но при этом обязательно вместе с их свойствами! То есть "физические" права на таблицы objects и object_properties должны быть одинаковыми. При использовании предложенной вами схемы с "физическими" правами имеем дублирование данных, обусловленное логической моделью.)

P.P.S.: Disclaimer. :) Мне с такой задачей сталкиваться не приходилось, то есть опыта в этом нет.

P.P.P.S.: Вообщето-то этому топику правильнее в форум "Проектирование БД".
...
Рейтинг: 0 / 0
05.05.2005, 20:37
    #33051579
джанкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.12.2008, 14:10
    #35734904
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
проссматривая старые темы, посмотрел в pg_class
...
Рейтинг: 0 / 0
25.12.2008, 14:27
    #35734983
sherzod_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
раздача прав доступа на отдельные строки таблиц
а как насчет партишонинга по user_id
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / раздача прав доступа на отдельные строки таблиц / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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