powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / раздача прав доступа на отдельные строки таблиц
8 сообщений из 8, страница 1 из 1
раздача прав доступа на отдельные строки таблиц
    #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
раздача прав доступа на отдельные строки таблиц
    #33041363
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО попытка перенести клиентскую логику на сервер БД. Вариант рабочий, точнее другого особо и не придумаешь. По мне так слишком геморно. На больших таблицах тормоза будут недетские. Но если нужно, то почему бы и нет... В качестве рекомендации советую добавлять поле не владельца строки, а некой группы, в которую данный владелец может входить - так можно сделать доступ на одну строку нескольких пользователей.
...
Рейтинг: 0 / 0
раздача прав доступа на отдельные строки таблиц
    #33041924
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поддерживаю Hordi в том, что авторство записи надо делать на группу и права раздавать тоже на группы (авторство удобнее задавать не какой-то группой куда входит пользователь, а фиктивной группой доступа, определяемой по атрибутам записи или самим человеком). Пусть даже первое время придётся делать отдельную группу на каждого пользователя, но иначе при росте системы до 500-1000 пользователей администрировать огромное число записей acl будет не по силам, да и размер офигенный получится.
А вот насчет выноса проверки доступа на клиента не согласен - разграничение доступа относится к данным и ИМХО должно производится как можно ближе к ним.
...
Рейтинг: 0 / 0
раздача прав доступа на отдельные строки таблиц
    #33042122
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может 1 - все acl_* в одну таблицу +поле тип доступа
Может 2 - набор прав в стиле линуха, для владельца, для группы, для других ?
...
Рейтинг: 0 / 0
раздача прав доступа на отдельные строки таблиц
    #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
раздача прав доступа на отдельные строки таблиц
    #33051579
джанкер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
раздача прав доступа на отдельные строки таблиц
    #35734904
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проссматривая старые темы, посмотрел в pg_class
...
Рейтинг: 0 / 0
раздача прав доступа на отдельные строки таблиц
    #35734983
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как насчет партишонинга по user_id
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / раздача прав доступа на отдельные строки таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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