Дизайн БД для имплементации users/groups/roles

Seryi
Ник закрыт как дубликат.
Posts: 6238
Joined: 14 Mar 2001 10:01
Location: .MD -> .SI -> .SE -> .AR.US -> .MD

Дизайн БД для имплементации users/groups/roles

Post by Seryi »

Как вы считаете верным имплементировать дизайн базы данных где поддерживаются понятия
users
groups
roles

Вместе с тем хотелось бы имплементировать систему безопасности похожую на то что есть в Windows.
Есть ли уже какие-то готовые или общепринятые решения?
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Нужно создать таблицы users,groups,roles :)
Если серьезно то у нас точно такая же база реализована
Вачале запихнули права в ActiveDirectory, а когда поня что по скорости это полный отстой да и ролей стало не хватать быстренько перешли на SQL
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Seryi
Ник закрыт как дубликат.
Posts: 6238
Joined: 14 Mar 2001 10:01
Location: .MD -> .SI -> .SE -> .AR.US -> .MD

Post by Seryi »

Dmitry67 wrote:Нужно создать таблицы users,groups,roles :)
Если серьезно то у нас точно такая же база реализована
Вачале запихнули права в ActiveDirectory, а когда поня что по скорости это полный отстой да и ролей стало не хватать быстренько перешли на SQL


А какой дизайн таблиц вы использовали для users, groups, roles?
Как вы организовывали security descriptor на объектах?
User avatar
Kycb-Kycb
Уже с Приветом
Posts: 224
Joined: 16 Nov 2002 15:36
Location: New York

Post by Kycb-Kycb »

Dmitry67 wrote:Вачале запихнули права в ActiveDirectory, а когда поня что по скорости это полный отстой да и ролей стало не хватать быстренько перешли на SQL

А можно подробней про проблемы со скоростью?
Что тормозило (создание users, authentication...) и на сколько сильно?
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

Я реализовывал

Вычисление эффективный прав, то есть тех которые берутся как сумма всех прав из всех групп где юзер учавствует + права юзера на объект непосредственно + если хотя бы одно из прав is "access denied" то результат должен быть отказом доступа

Как видим процедура довольно дорогая, поэтому на каждый объект для каждого юзера имеющего хоть какие то права имеем запись в специальной таблице "EffectiveRights", которая пересчитывается когда меняются права в основной таблице ACL, или юзер меняет свое членство в группе (естественно пересчитываем только релевантные записи)

Далее на моем проекте это породило гигантских размеров таблицу EffectiveRights, поэтому я изменил алгоритм так что если объект не имеет собственных permissions, то права наследуются из ближайшего предка который таковые имеет и соответсвенно в EffectiveRights есть только записи у который permissions собственные а не унаследованые.

Таким образом для того что бы получить права на объект находим ближайшего предка (включая самого себя ) в таблице ACL, и находим эффективные права для данного юзера в таблице EffectiveRights.

Все выразилось в нескольких красивых view, и работает очень эффективно.
Вопросы организации максимально эффективных алгоритмов поиска иерархий в плоской базе это отдельный вопрос :)
Никакой разрухи нет. (с) Проф. Преображенский.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

По повдудизайа уже рссказали
По поводу тормозов в AD

Есть миллион документов
Надо показать те на которые у пользователя есть права
В SQL идет join с таблицей где сидят права и все выводится очен быстро

В AD... ну в общем Вы ужепредставили сколько запрашивается права на милион документов в цикле?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Бродяга
Уже с Приветом
Posts: 16086
Joined: 22 Apr 2003 17:57
Location: Колыбель

Post by Бродяга »

Сейчас довожу проект до ума который уже не один год тут писали. Использую оракл и oracle virtual private database довольно быстро и очень удобно.
Бог создал людей разными, Линкольн дал людям свободу, а Кольт всех уравнял.
User avatar
YellowMan
Уже с Приветом
Posts: 1099
Joined: 30 Sep 1999 09:01
Location: Bryansk,RUSSIA >> Dublin, Ireland

Post by YellowMan »

Я тоже делал/делаю уже второй год - почти то же самое что г-н Strannik223...кроме того что у меня sp а не views.
Интересно как совпало :)
Удачи@С.Смирнов
User avatar
Strannik223
Уже с Приветом
Posts: 569
Joined: 14 Dec 2003 04:06
Location: Львов->Киев->Торонто

Post by Strannik223 »

YellowMan wrote:Я тоже делал/делаю уже второй год - почти то же самое что г-н Strannik223...кроме того что у меня sp а не views.
Интересно как совпало :)


Да у меня то же хранимки но что бы уменьшить количество повторяющегося кода и упростить его я написал вьюшки которые возвращают эффективные права для любого объекта
Никакой разрухи нет. (с) Проф. Преображенский.
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Post by Palych »

Dmitry67 wrote:По повдудизайа уже рссказали
По поводу тормозов в AD

Есть миллион документов
Надо показать те на которые у пользователя есть права
В SQL идет join с таблицей где сидят права и все выводится очен быстро

В AD... ну в общем Вы ужепредставили сколько запрашивается права на милион документов в цикле?


AD - eto LDAP?
Esli tak - zachem loop? :pain1:

Return to “Вопросы и новости IT”