Хранение информации о правах доступа

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Хранение информации о правах доступа

Сообщение MIT » 12.12.2009 (Сб) 1:24

Нужно организовать гибкую систему членства на основе MSSQL базы (2008). Схема следующая: есть пользователь, есть группа, к которой этот пользователь принадлежит, а у группы есть права (на доступ, на действие и т.п.).
Каким образом это лучше хранить в базе? Если с пользователями и группами все понятно - данные пользователя содержат индекс группы, то как лучше всего хранить права, с учетом того, что количество прав и групп не будет фиксированным (т.е. ни под права, ни под группы выделять столбцы таблицы неприемлимо)?

Вспоминается моя предыдущая тема в этом разделе с аналогичным вопросом, но может есть что-то лучшее...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Хранение информации о правах доступа

Сообщение iGrok » 12.12.2009 (Сб) 2:33

Вытащено из BackEndPro (надстройки над php-фреймворком CodeIgniter).

Таблица юзеров.
Таблица групп.
Таблица ресурсов к которым предоставляется доступ.
Таблица разрешений(троек группа - ресурс - действие(разрешить или запретить)).

Там ещё есть таблица возможных действий и таблица разрешения действий, примерно по тому же принципу.

Оптимизировать по вкусу.
label:
cli
jmp label

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Хранение информации о правах доступа

Сообщение Roman Koff » 12.12.2009 (Сб) 3:00

А стандартный механизм asp.net авторизации не подходит?
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Хранение информации о правах доступа

Сообщение SLIM » 12.12.2009 (Сб) 8:53

Как вариант, слышал что MS SQL работает с XML неплохо.
Но, в MS SQL и так гибкий механизм контроля прав доступа. Не знаю как в 2008, но в 2000 точно, а значит и в 2008 тоже.
Там также пользователи объединены в группы и т.д. И права у них разные.
Пишите жизнь на чистовик.....переписать не удастся.....

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Хранение информации о правах доступа

Сообщение MIT » 12.12.2009 (Сб) 10:47

iGrok писал(а):Там ещё есть таблица возможных действий и таблица разрешения действий, примерно по тому же принципу.
А можешь пояснить что это такое и зачем нужно?

Roman Koff писал(а):А стандартный механизм asp.net авторизации не подходит?
Не очень: система авторизации должна работать на нескольких доменах, а каждый отдельный сайт работает на веб-ферме, что добавляет некоторые сложности в настройке.

SLIM писал(а):Но, в MS SQL и так гибкий механизм контроля прав доступа.
Я довольно поверхностно знаю возможности MSSQL сервера, посему пока не будем трогать данный механизм. (Сейчас изучаю умную книжку по нему, может что и вычитаю хорошего.)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Хранение информации о правах доступа

Сообщение iGrok » 12.12.2009 (Сб) 14:22

MIT писал(а):
iGrok писал(а):Там ещё есть таблица возможных действий и таблица разрешения действий, примерно по тому же принципу.
А можешь пояснить что это такое и зачем нужно?

Я ей толком не пользовался, ибо оно было криво реализовано, и не работало, а мне было без надобности, так что "чинить" не стал. )

Вкратце, это в целом была админка сайта.
Ресурсами задавались адреса страниц, доступом к которым надо было управлять.
Действиями задавались возможные действия (создание, изменение, редактирование, модерация, удаление, и т.п.).

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

Структура получается громоздкая, но достаточно гибкая.
Мне эти "действия" были нафиг не нужны, я ограничился ресурсами. )
label:
cli
jmp label

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Хранение информации о правах доступа

Сообщение ANDLL » 12.12.2009 (Сб) 14:49

Ну а в чем проблема
Таблица действий
Таблица объектов
Таблица макеров пользователей(пользователи, группы и что там еще)
И таблица в которой ссылки на все три и плюс еще битовое поле - разрешение, запрет.
Если без наследования - то вытягивается элементарным запросом, имеющим логарифмическую сложность при правильно проставленых индексах.
Да и при чем тут авторизация и права доступа - это разные вещи(совсем)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Хранение информации о правах доступа

Сообщение FireFenix » 12.12.2009 (Сб) 15:04

MIT писал(а):
iGrok писал(а):Там ещё есть таблица возможных действий и таблица разрешения действий, примерно по тому же принципу.
А можешь пояснить что это такое и зачем нужно?

Если нужно базовую систему прав, то можно юезр-таблице сделать поле access int, где числовое поле означет уровень прав и проверяешь типа if access < 50 then show()

Если же нужно контролить каждое дыхание юзера отдельно, то лучше заводить отдельную БД для каждого действия c полями типа
int(11) - id_user
bool - can_write
bool - can_read
bool - car_update
потом при авторизации лефтджоинишь к юзеру по ид и при каждой действии проверяешь нужное поле, типа IF user("can_write") = True Then Write()
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Хранение информации о правах доступа

Сообщение MIT » 12.12.2009 (Сб) 15:19

ANDLL писал(а):Да и при чем тут авторизация и права доступа - это разные вещи(совсем)
В ASP.NET есть стандартный membership-функционал, который довольно тесно связан с авторизацией, реализованной, опять же, стандартными методами. От стандартной авторизации я отказался давно, систему членства также хотелось бы свою.

ANDLL писал(а):Таблица действий
Таблица объектов
При условии, что операции над объектами могут производится одинаковые (аналогичные), иначе смысла в отдельной таблице для действий не вижу...

FireFenix писал(а):лучше заводить отдельную БД для каждого действия
:lol:

Ладно, спасибо всем за советы, общая картина ясна, попробую реализовать.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Хранение информации о правах доступа

Сообщение VVitafresh » 13.12.2009 (Вс) 13:18

ANDLL писал(а):Да и при чем тут авторизация и права доступа - это разные вещи(совсем)

Разве? Я всегда думал, что авторизация -- это и есть проверка прав доступа пользователя на определенные действия.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Хранение информации о правах доступа

Сообщение iGrok » 13.12.2009 (Вс) 13:57

VVitafresh писал(а):
ANDLL писал(а):Да и при чем тут авторизация и права доступа - это разные вещи(совсем)

Разве? Я всегда думал, что авторизация -- это и есть проверка прав доступа пользователя на определенные действия.

Нет.
Авторизация - это подтверждение подлинности пользователя.
А права доступа - это права доступа.
label:
cli
jmp label

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Хранение информации о правах доступа

Сообщение VVitafresh » 13.12.2009 (Вс) 14:30

iGrok писал(а):Нет.
Авторизация - это подтверждение подлинности пользователя.
А права доступа - это права доступа.

Я думаю тут какая-то путаница между авторизацией и аутентификацией. Вообще-то подтверждение подлинности пользователя -- это аутентификация.

Authentication
Authentication is the process of obtaining identification credentials such as name and password from a user and validating those credentials against some authority. If the credentials are valid, the entity that submitted the credentials is considered an authenticated identity. Once an identity has been authenticated, the authorization process determines whether that identity has access to a given resource.


Authorization
Authorization determines whether an identity should be granted access to a specific resource.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Хранение информации о правах доступа

Сообщение iGrok » 13.12.2009 (Вс) 19:32

Тьфу-ты блин. А ведь точно. )
label:
cli
jmp label

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Хранение информации о правах доступа

Сообщение ANDLL » 13.12.2009 (Вс) 20:31

Ага, я то же спутал
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 155

    TopList