Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проектирование - Разграничение прав доступа 
:(
    Опции темы
BlackLFL
Дата 23.10.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: нет
Всего: 12



Добрый день!

Цитата

Обязательно указание:
    * базы данных и версии: БД поддерживающая SQL 92
    * способа доступа: неважно
    * среды программирования: неважно


Программа разрабатывается под web, будет работать от имени основного пользователя, который имеет доступ ко всем таблицам проекта, а все остальные "пользователи" будут виртуальными => как, предположим, на любом форуме... мы же не регистрируем их в Б.Д, а просто заносим в таблицу, например, members.

Программа, имеет десятки классов, к методам которых предоставляется доступ на основе привелегий к таблицам Б.Д.

Например, есть класс proprietor, в его подчинение ( на уровне программы ) таблицы:
proprietor
proprietor_xxx
proprietor_stats

Если пользователь имеет привелегию select к таблице proprietor, соответственно ему будет позволено пользоваться методом proprietor.view, если имеет привелегию update, то proprietor.edit, и т.п.

Соответственно, нам необходимо спроектировать разграничение доступа для наших виртуальных пользователей.

Привелегии будут даваться на основе ролей, роль в свою очередь может наследовать привелегии другой роли.
Предполагаю, что структура таблицы для ролей будет следующая:
Код

    CREATE TABLE "MEMBERS_ROLES" 
    (
        "ROLE_NAME" VARCHAR2(100) NOT NULL, 
        "TABLE_NAME" VARCHAR2(100), 
        "COLUMN_NAME" VARCHAR2(100), 
        "PRIV" VARCHAR2(10)
    )  
    TABLESPACE "USERS";


И таблица предоставленных пользователю ролей.
Код

    CREATE TABLE "MEMBERS_PRIV" 
    (
        "MEMBER_ID" NUMBER(11) NOT NULL, 
        "MEMEBER_ROLE_NAME" VARCHAR2(100) NOT NULL
    )  
    TABLESPACE "USERS";


Создаем роль default_role, которая будем иметь привелегию select к всей таблицы proprietor, proprietor_xxx

Код

INSERT INTO members_roles VALUES ('default_role', 'proprietor', NULL, 'select');
INSERT INTO members_roles VALUES ('default_role', 'proprietor_xxx', NULL, 'select');


Если мы хотим предоставить пользователю привелегии роли default_role, нам необходимо в таблицу members_priv сделать insert с значениями ID пользователя, имя роли.

Код

INSERT INTO members_priv VALUES (1, 'default_role');


Тут думаю все предельно просто ...

Вопрос для меня в следующем, как правильно спроектировать наследование ролей.

Предположим есть вторая роль second_role, она имеет привелегию update к таблице proprietor_stats.

Код

INSERT INTO members_roles VALUES ('second_role', 'proprietor_stats', NULL, 'update');


Теперь попробуем наследовать ролью default_role привелегии роли second_role , для этого создаим третью таблицу members_roles_inheritance

Код

    CREATE TABLE "MEMBERS_ROLES_INHERITANCE" 
    (
        "ROLE" VARCHAR2(100) NOT NULL, 
        "INHERITANCE_ROLE" VARCHAR2(100) NOT NULL
    )  
    TABLESPACE "USERS"; 


Код

INSERT INTO members_roles_inheritance VALUES ('default_role', 'second_role');


Думаю структура на первый взгляд логична ...

Теперь усложним, предположим роль second_role наследует привелегии роли third_role

Код

-- Даем роли привелегии 
INSERT INTO members_roles VALUES ('third_role', 'proprietor', NULL, 'delete');
-- Наследуем 
INSERT INTO members_roles_inheritance VALUES ('second_role', 'third_role');


Получается, что теперь роль default_role имеет привелегии ролей second_role, third_role.

Как Вы думаете, насколько данная структура имеет право на жизнь?

Для меня очень серьезным вопросом остается, как мне потом получить все привелегии для пользователя, если роль наследует роль, та роль в свою очередь наследует еще роль как было показано выше?!

Заранее благодарен за помощь и любые комментарии!

п.с. в коде использован sql код создания таблиц под oracle, это не говорит о том, что я разрабатываю структуру под него, там уже все давно реализовано ... с помощью sun инструментов, мне лишь удобнее тестировать код.

Это сообщение отредактировал(а) BlackLFL - 23.10.2007, 14:01
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0803 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.