Как вы считаете верным имплементировать дизайн базы данных где поддерживаются понятия
users
groups
roles
Вместе с тем хотелось бы имплементировать систему безопасности похожую на то что есть в Windows.
Есть ли уже какие-то готовые или общепринятые решения?
Дизайн БД для имплементации users/groups/roles
-
- Ник закрыт как дубликат.
- Posts: 6238
- Joined: 14 Mar 2001 10:01
- Location: .MD -> .SI -> .SE -> .AR.US -> .MD
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Нужно создать таблицы users,groups,roles
Если серьезно то у нас точно такая же база реализована
Вачале запихнули права в ActiveDirectory, а когда поня что по скорости это полный отстой да и ролей стало не хватать быстренько перешли на SQL
Если серьезно то у нас точно такая же база реализована
Вачале запихнули права в ActiveDirectory, а когда поня что по скорости это полный отстой да и ролей стало не хватать быстренько перешли на SQL
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Ник закрыт как дубликат.
- Posts: 6238
- Joined: 14 Mar 2001 10:01
- Location: .MD -> .SI -> .SE -> .AR.US -> .MD
Dmitry67 wrote:Нужно создать таблицы users,groups,roles
Если серьезно то у нас точно такая же база реализована
Вачале запихнули права в ActiveDirectory, а когда поня что по скорости это полный отстой да и ролей стало не хватать быстренько перешли на SQL
А какой дизайн таблиц вы использовали для users, groups, roles?
Как вы организовывали security descriptor на объектах?
-
- Уже с Приветом
- Posts: 224
- Joined: 16 Nov 2002 15:36
- Location: New York
-
- Уже с Приветом
- Posts: 569
- Joined: 14 Dec 2003 04:06
- Location: Львов->Киев->Торонто
Я реализовывал
Вычисление эффективный прав, то есть тех которые берутся как сумма всех прав из всех групп где юзер учавствует + права юзера на объект непосредственно + если хотя бы одно из прав is "access denied" то результат должен быть отказом доступа
Как видим процедура довольно дорогая, поэтому на каждый объект для каждого юзера имеющего хоть какие то права имеем запись в специальной таблице "EffectiveRights", которая пересчитывается когда меняются права в основной таблице ACL, или юзер меняет свое членство в группе (естественно пересчитываем только релевантные записи)
Далее на моем проекте это породило гигантских размеров таблицу EffectiveRights, поэтому я изменил алгоритм так что если объект не имеет собственных permissions, то права наследуются из ближайшего предка который таковые имеет и соответсвенно в EffectiveRights есть только записи у который permissions собственные а не унаследованые.
Таким образом для того что бы получить права на объект находим ближайшего предка (включая самого себя ) в таблице ACL, и находим эффективные права для данного юзера в таблице EffectiveRights.
Все выразилось в нескольких красивых view, и работает очень эффективно.
Вопросы организации максимально эффективных алгоритмов поиска иерархий в плоской базе это отдельный вопрос :)
Вычисление эффективный прав, то есть тех которые берутся как сумма всех прав из всех групп где юзер учавствует + права юзера на объект непосредственно + если хотя бы одно из прав is "access denied" то результат должен быть отказом доступа
Как видим процедура довольно дорогая, поэтому на каждый объект для каждого юзера имеющего хоть какие то права имеем запись в специальной таблице "EffectiveRights", которая пересчитывается когда меняются права в основной таблице ACL, или юзер меняет свое членство в группе (естественно пересчитываем только релевантные записи)
Далее на моем проекте это породило гигантских размеров таблицу EffectiveRights, поэтому я изменил алгоритм так что если объект не имеет собственных permissions, то права наследуются из ближайшего предка который таковые имеет и соответсвенно в EffectiveRights есть только записи у который permissions собственные а не унаследованые.
Таким образом для того что бы получить права на объект находим ближайшего предка (включая самого себя ) в таблице ACL, и находим эффективные права для данного юзера в таблице EffectiveRights.
Все выразилось в нескольких красивых view, и работает очень эффективно.
Вопросы организации максимально эффективных алгоритмов поиска иерархий в плоской базе это отдельный вопрос :)
Никакой разрухи нет. (с) Проф. Преображенский.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
По повдудизайа уже рссказали
По поводу тормозов в AD
Есть миллион документов
Надо показать те на которые у пользователя есть права
В SQL идет join с таблицей где сидят права и все выводится очен быстро
В AD... ну в общем Вы ужепредставили сколько запрашивается права на милион документов в цикле?
По поводу тормозов в AD
Есть миллион документов
Надо показать те на которые у пользователя есть права
В SQL идет join с таблицей где сидят права и все выводится очен быстро
В AD... ну в общем Вы ужепредставили сколько запрашивается права на милион документов в цикле?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 16086
- Joined: 22 Apr 2003 17:57
- Location: Колыбель
-
- Уже с Приветом
- Posts: 1099
- Joined: 30 Sep 1999 09:01
- Location: Bryansk,RUSSIA >> Dublin, Ireland
-
- Уже с Приветом
- Posts: 569
- Joined: 14 Dec 2003 04:06
- Location: Львов->Киев->Торонто
YellowMan wrote:Я тоже делал/делаю уже второй год - почти то же самое что г-н Strannik223...кроме того что у меня sp а не views.
Интересно как совпало :)
Да у меня то же хранимки но что бы уменьшить количество повторяющегося кода и упростить его я написал вьюшки которые возвращают эффективные права для любого объекта
Никакой разрухи нет. (с) Проф. Преображенский.
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Dmitry67 wrote:По повдудизайа уже рссказали
По поводу тормозов в AD
Есть миллион документов
Надо показать те на которые у пользователя есть права
В SQL идет join с таблицей где сидят права и все выводится очен быстро
В AD... ну в общем Вы ужепредставили сколько запрашивается права на милион документов в цикле?
AD - eto LDAP?
Esli tak - zachem loop?