Russian Qt Forum
Ноябрь 24, 2024, 14:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Разграничение прав доступа в SQL сервере  (Прочитано 18057 раз)
-QT-
Гость
« : Август 28, 2007, 14:38 »

Прошу прощения за вопрос не по теме НО запостил я этот же вопрос в нужном форуме, а туда видимо
никто не заходит. Благодарю за понимание. Веселый

Доброго времени суток.
Объясните, кто использовал схемы в PostgreSQL, как это можно практически
использовать для разделения доступа в приложении и необходимо ли это делать.

Погуглив проблемму наткнулся на Veil for PostgreSQL. Скачал - собрал - поставил - исследую.
Кто использовал данную приблуду отзовитесь - поделитесь мнениями.

Заранее спасибо.
Записан
alexis
Гость
« Ответ #1 : Август 28, 2007, 20:10 »

Именно данную "приблуду" не использовал, но...

Для разраграничения прав у нас используется самописный тип: row_acl.
Вот так выглядит из psql консоли.
Код:
cms1=> select name, usr, grp, acl from element limit 5;
        name        |  usr  |       grp        |       acl
--------------------+-------+------------------+-----------------
 page_init          | admin | banner_publisher | rwdixr---x-----
 page_init          | admin | banner_agency    | rwdixr---x-----
 script_chooser     | admin | banner_agency    | rwdixr---x-----
 update_html_banner | admin | banner_agency    | rwdixr---x-----
 page_init          | admin | admin            | rwdixr---xr---x

То есть: каждая строка таблицы имеет колонку типа row_acl
В этом типе в 15 битах описываются права для владельца, группы и остальных.
В общем - unix-way.
В добавок ко всему, реальные таблицы закрыты вьюхами на DML.
На вьюхах описаны правила, что делать при вставке, апдейте, делите.
Вьюхи построены на основе права "чтения" на объект.
Записан
Вудруф
Гость
« Ответ #2 : Август 29, 2007, 07:04 »

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

Возможно, мы несколько перестраховались, но всё работает. Цель - повышение безопасности, чтобы даже при взломе нашего web-сервера злоумышленник не мог напрямую работать с базой данных...
Записан
Вячеслав
Гость
« Ответ #3 : Август 29, 2007, 07:26 »

Вот сюда посмотри - не слоник но рядом Подмигивающий
http://www.ibase.ru/devinfo/treedb2.htm
Записан
Вячеслав
Гость
« Ответ #4 : Август 29, 2007, 07:28 »

Именно данную "приблуду" не использовал, но...

Для разраграничения прав у нас используется самописный тип: row_acl.
Вот так выглядит из psql консоли.

То есть: каждая строка таблицы имеет колонку типа row_acl
В этом типе в 15 битах описываются права для владельца, группы и остальных.
В общем - unix-way.
Гы таки у вас acl или rwd ? ЕСли первое - скоростью работы и размером баз не поделитесь - а то я как-раз голову ломаю как ускорить процесс .......
Записан
alexis
Гость
« Ответ #5 : Август 29, 2007, 08:28 »

Назвали мы его так - row_acl
Аксес лист для строки.
r - read ( как select )
w - write( как update/delete )
d - delete ( как уадение подчиненного объекта: связи, подстатьи, блоба)
i - insert ( как вставка подчиненного объекта )
x - право на просмотр объектов сущности - контейнер: раздел, страница )
Тип внутренне представлен int'ом.
При выводе text row_acl_out() преобразует интовую маску в текстовое представление
Есть гистовый индекс для этого типа.
Скорости на больших объемах не замеряли. Могу сказать, что сейчас на >5 гектарной базе запросы умещаются в сотые доли секунды.
Записан
Вячеслав
Гость
« Ответ #6 : Август 29, 2007, 09:19 »

Ясненько - то-есть все-таки rwd Подмигивающий Ну что-ж пошел дальше рыть   Непонимающий
Записан
-QT-
Гость
« Ответ #7 : Август 29, 2007, 15:18 »

Не думал, что будет такой активный отклик на мой вопрос.
Спасибо что откликнулись.
Прочитал http://www.ibase.ru/devinfo/treedb2.htm и пришел к выводу что система RWD для моего случая
подходит более чем ACL. Теперь нужно правильно реализовать эту схему для моего случая.

По поводу "схем" в постгресе  - тоже понял, хочу только уточнить. Вудруф, у Вас  "схема" применялась по принципу -
одна схема - один АРМ или более глобально ?

По вопросу Veil - скажу так (если не ошибаюсь) Это то что нужно даже с интегрированием в сам сервер.  Смеющийся Тут еще
нужно покопаться ... Строит глазки Непонимающий
Записан
alexis
Гость
« Ответ #8 : Август 29, 2007, 17:01 »

Если есть желание, могу сделать архив с реализацией нашей структуры базы.
Архив init скриптов.
Записан
-QT-
Гость
« Ответ #9 : Август 30, 2007, 08:05 »

Если есть желание, могу сделать архив с реализацией нашей структуры базы.
Архив init скриптов.
С удовольствием посмотрю. Большое спасибо.
Записан
-QT-
Гость
« Ответ #10 : Август 30, 2007, 09:05 »

Вчера обдумывал варианты решения. Непонимающий
Остановившись на схеме RWD подумалось, ведь в самой СУБД есть и пользователи и группы
так кто-же нам мешает их использовать в решении проблемы разграничения прав - !!!!
Оказывается - незнание !  Смеющийся или нехватка знаний.
Подскажите КАК залезть в нутро сервера чтобы по умолчанию в таблицу добавить несколько полей и триггеров.
Записан
Вячеслав
Гость
« Ответ #11 : Август 30, 2007, 15:54 »

НЕ НАДО трогать системные таблицы - гимору не оберешься Грустный
Вообще-то логичнее делать разграничение прав доступа для каждой бд... А если хош нормальную защиту даннных - смотри в сторону мандатов -> Oracle Linter.... etc
Записан
alexis
Гость
« Ответ #12 : Август 30, 2007, 16:08 »

Мы используем внутренние роли постгреса.
+ посгрес позволяет создавать пользователей per-database
Записан
-QT-
Гость
« Ответ #13 : Август 31, 2007, 10:28 »

НЕ НАДО трогать системные таблицы - гимору не оберешься Грустный
Вообще-то логичнее делать разграничение прав доступа для каждой бд... А если хош нормальную защиту даннных - смотри в сторону мандатов -> Oracle Linter.... etc
Для каждой базы данных права будут создаваться. Необходимо разграничение по доступу для записи.
Иметь владельца записи и права для ( владельца-группы-прочие ).
По вопросу СУБД - никаких шатаний не подразумевается - выбран Постгрес.
Возможно использовать данную схему без изменения системных таблиц но тогда я думаю вся система доступа будет делаться
не опираясь на возможности СУБД - а самостоятельно и сущесствовать обособленно от какого либо сервера баз данных.
« Последнее редактирование: Август 31, 2007, 10:31 от -=QT=- » Записан
-QT-
Гость
« Ответ #14 : Август 31, 2007, 10:32 »

Мы используем внутренние роли постгреса.
+ посгрес позволяет создавать пользователей per-database
Если можно подробнее раскажите где копать, читать, смотреть.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.197 секунд. Запросов: 21.