powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование системы секьюрити
4 сообщений из 4, страница 1 из 1
Проектирование системы секьюрити
    #32432058
johnRSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, доброго времени суток.

Существует система документооборота, к которой необходимо прикрутить
секьюрити средствами БД. Хотел посоветоваться как это лучше сделать и
какие технологии предпочтительней использовать.

Дело в том, что :

1. Секьюрити необходимо разработать на уровне записей таблице (в том числе).
Если бы задача стояла использовать ограничения на столбцы или таблицы, то
это одно... но здесь нужно и на записи также. Так как предположим есть некоторый
общий журнал документов и однин юзер должен видеть в нем некоторые записи - другой
же нет.

2. Секьюрити должно быть построено не на пользователях, а на группах.
Пользователи прямых привелегий не имеют. Все работает только на уровне групп.

3. Один пользователь может входить в несколько групп сразу.

4. Реализовать это дело необходимо для Оракла (9) и СКЛ Сервера(2000).


Что можно было бы использовать?


Мне очень смутно представляется такая схема:

1. Все таблицы создаются только под админовским экаунтом (в его схеме)

2. Когда происходит грант группе на доступ к какой-либо таблице, то :
а) на самом деле админовская схема (экаунт) создает например хранимую процедуру,
которая будучи создана администратором имеет полный доступ к необходимой таблице,
б) уровень доступа к записи (SELECT, INSERT, UPDATE, DELETE) ограничивает внутри
своего кода.
в) Затем на эту хранимую процедуру даются права EXECUTE группе. Так происходит грант.

г) Сама хранимая процедура должна возвращать видимо курсор с выбранными данными

3. На вход хранимой процедуры должны поступать условия выборки данных, к которым
она сама будет прибавлять ещё свое WHERE, где будет каким-либо условием ограничивать
область видимости выбираемых данных, т.е. чтобы они выбирались только из тех, что видны пользователю.

Как реализовать вот это самое ограничение области видимости (WHERE) непонятно.
Очевидно, что нужно прибавить к каждой таблице метаданных системы по столбцу, по которому собственно
и будет происходить ограничение видимости.. типа ID_GROUP.
НО так как количество групп не постоянно (они создаются, удаляются, меняются их привелегии), то одним
столбцом четко идентифицирующим группу не обойдешся.. Можно в этом столбце на битовом уровне
содержать маску, которая бы описывала бы все группы, имеющие отношение к этой записи, а затем идти в спец. таблицу метаданных описывающих группы и их права и считывать все эти вещи отдельно..


Короче, что-то все слишком мутно и сложно... - одни расплывчатые идеи.

В Оракле смотрел Fine Granted Access Control - вроде и подходит и не подходит.. - непонятно.
Что смотреть у МС СКЛ не знаю.

Далее.. Если делать секьюрити на уровне записей, когда, как в моем случае, рекордсеты транслируются через
уровень хранимых процедур + условие WHERE довольно сложное и идет по нескольким таблицам,
подразумеваю, что должно быть бешенное падение производительности - она же имеет очень серьезный приоритет
(производительность). Возможно каким-то образом можно привинтить материализованные вью или ещё что, что
позволит оставить скорость выборки данных на уровне..


В общем, вот такие мысли..
Наверняка кто-то уже сталкивался с подобными задачами и успешно решал их - буду рад конструктивному диалогу.

PS
Хочется решить задачу применительно к каждой из описываемых СУБД отдельно, используя самые сильные
её стороны, заточенные специально для данных задач.

Спасибо.
...
Рейтинг: 0 / 0
Проектирование системы секьюрити
    #32432447
bas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форуме по мсскл уже все тебе рассказали, можно еще предложить такую схему

Код: 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.
create table Group(
group_id Number NOT NULL, 
text Varachar( 200 ),
Primary Key(group_id));

create table Select_Grants(
group_id Number NOT NULL,
tablePK_id  Number NOT NULL,
table_name VaraChar2( 200 ) NOT NULL,
text Varchar2( 200 ),
Primary  Key(group_id, tablePK_id, table_name),
Foreign Key(group_id) Referances Group(Group_id));

create table Update_Grants(
group_id Number NOT NULL,
tablePK_id  Number NOT NULL,
table_name VaraChar2( 200 ) NOT NULL,
text Varchar2( 200 ),
Primary  Key(group_id, tablePK_id, table_name),
Foreign Key(group_id) Referances Group(Group_id));

create table Delete_Grants(
group_id Number NOT NULL,
tablePK_id  Number NOT NULL,
table_name VaraChar2( 200 ) NOT NULL,
text Varchar2( 200 ),
Primary  Key(group_id, tablePK_id, table_name),
Foreign Key(group_id) Referances Group(Group_id));

create table Insert_Grants(
group_id Number NOT NULL
table_name VaraChar2( 200 ) NOT NULL,
text Varchar2( 200 ),
Primary  Key(group_id, table_name),
Foreign Key(group_id) Referances Group(Group_id));



Можно также:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table Group(
group_id Number NOT NULL, 
text Varachar( 200 ),
Primary Key(group_id));

 /*Создается для каждой таблицы*/ 
create table Tab1_Grants(
group_id Number NOT NULL,
tablePK_id  Number,
operation VaraChar2( 200 ) NOT NULL,
text Varchar2( 200 ),
Primary  Key(group_id, tablePK_id, operation),
Foreign Key(group_id) Referances Group(Group_id),
Foreign Key(tablePK_id) Referances Tab1(pk_id));

...
Рейтинг: 0 / 0
Проектирование системы секьюрити
    #32433412
c127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно SP, но по-моему проще использовать предствления, это позволит тебе определять допуск к подмножеству строк в таблице и задавать как угодно сложные правила доступа, а в случае крайней необходимости можно безболезненно поменять предсталение. К таблицам напрямую лучше никого не пускать, появляется много ненужных проблем, представления ничем не хуже.
...
Рейтинг: 0 / 0
Проектирование системы секьюрити
    #32447476
PostgreSQL user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я правильно понял задачу, то Role-Compatibility Model поможет отцу русской демократии. И дешево, и сердито. Ну, или если хочется поизвращаться, то ACL. ;)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование системы секьюрити
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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