Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разделение прав доступа / 22 сообщений из 22, страница 1 из 1
04.03.2004, 18:13
    #32431744
Драга
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
Вопрос вот созрел, по правам доступа.

Хотелось бы организовать доступ к базе с разделением полномочий. Можно выдать права на всю таблицу, но это не подходит, т.к. слишком много там служебной и просто "секретной" информации для определенных ролей пользователей.
Вариан создать множество view, не нравиться, из-за необходимости создавать практически под каждую роль свой набор view. И не понятно потом, как создавать единый программный интерфейс для доступа к базе...

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

selece case when user in ('vasya') then password
else ''
end AS password,
case when user in ('vasya','petya') then login
else ''
end AS login
from table1

и так сформировать некий абстрактный интерфейс для доступа к базе.

Вот только думаю, может велосипед изобретаю? Может кто уже сталкивался с чем-подобным и имеем какой-нибудь опыт?
...
Рейтинг: 0 / 0
05.03.2004, 15:55
    #32432959
Shweik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
Таких глобалистских желаний пока не возникало разве что идея :
Есть вьюшка регистраций пользователей - каждое новое подключение при логине добавляет
в нее строку - регистрируется -
(при этом можно отбить подключение если кто-то с таким логином уже есть или логин забанен)
- однако если все нормально - проверяется статус пользователя и динамическим
сиквелом создаются вьюшки для него. Тут основная проблема-корректно чистить эти вещи
в соответствии с существующими форками постгреса. Но мне кажется это вполне решаемо.
...
Рейтинг: 0 / 0
11.03.2004, 12:21
    #32437685
Maxim Timofeyev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
авторЕсть вьюшка регистраций пользователей - каждое новое подключение при логине добавляет в нее строку - регистрируется

view же r/o. как можно в нее что-то добавить?
Покрайне мере в 7.4.1 они еще r/o.

Или я не догоняю? ;(
...
Рейтинг: 0 / 0
11.03.2004, 12:23
    #32437694
Maxim Timofeyev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
автори так сформировать некий абстрактный интерфейс для доступа к базе.

А схемы это не то?
Я ими не пользовался пока, но кажется, что это именнг оно и есть...
...
Рейтинг: 0 / 0
11.03.2004, 12:46
    #32437758
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
2 Maxim Timofeyev
Maxim Timofeyev
view же r/o. как можно в нее что-то добавить?

пишите RULE на INSERT и (если надо) на UPDATE

(а вью - это нынче RULE "_RETURN" AS ON
SELECT TO "имя_вьюхи" DO INSTEAD ... )

к примеру у меня работает:

CREATE OR REPLACE RULE "_INSERT" AS ON INSERT
TO tree_leaf
DO INSTEAD

(INSERT INTO tree (id, pid, pos, uname_create, uname_modify, date_create, date_modify, status )
VALUES (new.id, new.pid, new.pos, new.uname_create, new.uname_modify, new.date_create, new.date_modify, new.status );
INSERT INTO leaf (id, aid, company, kind, date, name, description, search_name, leaf_from, leaf_to, currency, value, payment_kind, planfact )
VALUES (new.id, new.aid, new.company, new.kind, new.date, new.name, new.description, new.search_name, new.leaf_from, new.leaf_to, new.currency, new.value, new.payment_kind, new.planfact ); );
...
Рейтинг: 0 / 0
11.03.2004, 20:15
    #32438853
CM Hungry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
Делать доступ не через view, а через процедуры, в которые передавать id пользователя, скажем.
...
Рейтинг: 0 / 0
18.03.2004, 14:47
    #32447402
PostgreSQL user
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
> Хотелось бы организовать доступ к базе с разделением полномочий.

Выбираешь ssa модель - и реализуешь ее в базе данных. Посмотри на ibase.ru - по этому поводу была статья.
...
Рейтинг: 0 / 0
11.06.2004, 18:22
    #32558804
Shweik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
PostgreSQL user> Хотелось бы организовать доступ к базе с разделением полномочий.

Выбираешь ssa модель - и реализуешь ее в базе данных. Посмотри на ibase.ru - по этому поводу была статья.
Что есть и как расшифровывается SSA??? Не знаю.
Единственный материал посвященый сабжу и расположенный на ibase.ru
предлагает два пути решения проблемы ACL(Access Control Lists) и RWD - по аналогии с используемыми в WinNT(W2K/Xp) и Unix методами разделения доступа к файлам.
http://www.ibase.ru/devinfo/treedb2.htm
IMHO схема RWD (Read Write Delete/Drop??) по многим признакам идеально подходит для реализации в Postgres. У кого есть другие мнения?
...
Рейтинг: 0 / 0
16.06.2004, 10:27
    #32562953
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
>> Хотелось бы организовать доступ к базе с разделением полномочий.

Работал на Oracle счас много делаю на Postgres. Механизм работы описанный ниже - не только мой стить - стиль многих коллективов разработчиков в финансовой сфере...

Общая безопасность и доступ к обьектам :
1. На все таблици существуют вьюхи и клиент читает только их, тем более
часто в разработках плоские таблици используются редко (только справочники некоторые - все равно есть вьюхи), организация связи таблиц тож во вьюхах.
Прав на таблици у клиентов вообще никаких нет. В итоге имеем для чтения
данных только вьюхи.
2. Модификация данных только через функции. Во первых всю бизнес логику
я размещаю только на серваке, во вторых всяческие проверки/валидности тож на серваке. Функцию создаем с опцией - например SECURITY DEFINER - она будет работать с правами создателя, юзеру дадим права только на выполнение функции. В итоге модификация данных происходит по строгим правилам описанным в функции.

При этом имеем общую информационную безопасность и технологическую аккуратность даже при самом простом интерфейсе - притом не важно на чем, по такой схеме у меня работает и WEB интерфейс и проги на Delphi.

Теперь про разделение полномочий юзверей:

1. Можно сделать свою табличку юзверей и много колонок с различными признаками (о синхронизации создания юзверя в табличке и на сервере я рассказывать не буду). Создаеш функции проверки всяки какие угодно и ...
2. Для чтения нужных строк во вьюхе(она уже готова) вставляеш например

"where check_read_record(user) = 1" - "check_read_record" - это название функции которую сделаеш.

3. Для модификации данных в процедуре вставляеш например

" if (check_add_record(user) = 0) then
RAISE EXCEPTION \'У вас нет прав на добавление записи !\';
end if;
"

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

Николай.
...
Рейтинг: 0 / 0
21.06.2004, 16:21
    #32570059
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
> ACL(Access Control Lists) и RWD

Оно. Только "в лоб" использованить ни то, ни другое не рекомендую.

> IMHO схема RWD (Read Write Delete/Drop??) по многим признакам идеально
> подходит для реализации в Postgres.

Она подходит для реализации в любой реляционной СУБД.

На самом деле, проблема прав по отношению к объекту и проблема разграничения доступа - две разные проблемы. Важно это понимать.

То, что описал Николай постом выше - хорошее решение, но несколько однобокое. ;) Попробуй его реализовать - поймешь, почему.
...
Рейтинг: 0 / 0
23.06.2004, 15:54
    #32574143
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
2 guest_20040621

> То, что описал Николай постом выше - хорошее решение, но несколько
> однобокое. ;) Попробуй его реализовать - поймешь, почему.

Я думаю не только мне хотелось бы услышать мнение об однобоком решении
публично. Зачем изобретать велосипед дважды - может ваше обьяснение
поможет кому-то (не только мне), а может не только поможет но и направит
на свежую струю - на то он и форум.

Без сарказма - хотелось бы услышать ваше мнение.

Николай.
...
Рейтинг: 0 / 0
24.06.2004, 02:03
    #32574767
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
ОК, Николай, если интересно:

> На все таблици существуют вьюхи и клиент читает только их

Это хорошо, но иногда требуется писать. ;)

> Модификация данных только через функции.

Это тоже хорошо. Только накладывает ограничения на dbms.

> where check_read_record ...

Хм... оно конечно тоже правильно. А если потребуется не rwe, а более сложная модель? Все переписывать? ;)

Почему, собственно, и было сказано: хорошо, но для конкретной реализации, а не для общего решения.

В общем случае я порекомендовал бы поддерживать традиционную трехуровневую security model:
1. dbms. Варианты в зависимости от задачи.
2. Интерфейс. Похоже на описанную Вами проверку, но чуть более универсально.
3. Данные. Тоже варианты в зависимости от задачи.

Реализовав такую модель один раз, ее можно использовать для любых решений.
...
Рейтинг: 0 / 0
24.06.2004, 14:11
    #32575581
Stas Tristan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
А что мешает вьюхи сделать обновляемыми?
...
Рейтинг: 0 / 0
24.06.2004, 18:10
    #32576250
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
2 guest_20040621

И все же не совсем понял - каковы ограничения ?

>> На все таблици существуют вьюхи и клиент читает только их
> Это хорошо, но иногда требуется писать. ;)

У меня не требуется - не даю в силу того что шаловливые ручки зная свой пароль могут например через драйвер ODBC и Excel или Acces получить доступ к разрешенному обьекту. Ето если делать нормально, можно конечно сделать изначальный вшитый вход с универсальным паролем в морде - строил и так - но не считаю что это хорошо. Ну это утрировано ...
Нет у меня запросов со словами insert, update, delete.

>> Модификация данных только через функции.
> Это тоже хорошо. Только накладывает ограничения на dbms.

Не накладывает - вы строите свой универсальный механизм проверки полномочий на базе той самой "таблички юзверей", можно и с наследованием - хозяин барин.
Если речь идет о DBMS как о некоей морде в которой с правами админа можно менять структуру метаданных - этот универсализм подходит к софтверным фирмам, только не ко мне в частности, ибо вопросы оптимизации по скорости мне не чужды и логику размазывать между мордой сервером я не буду - пусть сервак пашет.

>> where check_read_record ...
>Хм... оно конечно тоже правильно. А если потребуется не rwe, а более >сложная модель? Все переписывать? ;)

Про тоже - во фразе выше. А если сильно меняется технология - да, что-то может придется поправить, а сколько править зависит от того как спроектировать. А перестраивать универсальный механизм не больше времени займет ? - из практического опыта - больше.
А что значит сложная модель? Банковская система, в частности мое направление карточный бэкофис и процессинг - это какой уровень сложности ?

>Почему, собственно, и было сказано: хорошо, но для конкретной реализации, >а не для общего решения.

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

Может я чего не понял в однобокости такого решения и вашего понимания DBMS?

Николай.
...
Рейтинг: 0 / 0
24.06.2004, 19:58
    #32576396
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
> У меня не требуется

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

> - не даю в силу того что шаловливые ручки зная свой
> пароль могут например через драйвер ODBC и Excel или Acces получить доступ к
> разрешенному обьекту.

Хороший пример. Вот для решения этой проблемы 1-й уровень модели и предназначен: дать пользователю (любому) ровно стольно прав, сколько нужно. На самом деле, это не так сложно, как может показаться.

> Не накладывает - вы строите свой универсальный механизм проверки полномочий
> на базе той самой "таблички юзверей", можно и с наследованием - хозяин барин.

Не все dbms поддерживают функции. Как хранить пользователей с их параметрами - вообще дело десятое. Хоть в текстовом файле на шифрованном разделе диска - не принципиально.

> Если речь идет о DBMS как о некоей морде в которой с правами админа можно
> менять структуру метаданных

Да нет, о вполне себе реляционной dbms в традиционном понимании и традиционном использовании.

> А перестраивать универсальный механизм не больше времени займет ?

Вообще нисколько времени не займет. То есть буквально - ни секунды. ;)

> А что значит сложная модель?

Под сложной моделью имелся в виду отличный от традиционного набор прав (традиционно rwe, однако, никто не мешает добавить modify, например) и уровней доступа. Плюс фичи типа наследования и прочего хлама. Плюс... на этом пока остановимся. ;)

> Для реализации своей системы на предприятии - хорошо, быстро, удобно,
> сопровождаемо.

В сравнении с чем?

Представьте себе количество геморроя при переходе с PostgreSQL на, скажем, db2. Не думаю, что Вы вспомните о том, что это было "хорошо", "быстро", "удобно" и "сопровождаемо". ;))
...
Рейтинг: 0 / 0
25.06.2004, 10:47
    #32576851
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
2 guest_20040621

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

Писать не в базу а во вьюху - невнимательно читали первый пост.
Как раз одна из причин - сложные транзакции где проходят изменения по нескольким таблицам и приводит к применению функций. А одна транзакция
и пару страниц текста в транзакции - это и есть читабельность кода, понятность действий и простота обслуживания

>> Для реализации своей системы на предприятии - хорошо, быстро, удобно,
>> сопровождаемо.
>В сравнении с чем?
>Представьте себе количество геморроя при переходе с PostgreSQL на, >скажем, db2. Не думаю, что Вы вспомните о том, что это >было "хорошо", "быстро", "удобно" и "сопровождаемо". ;))

На предприятиях со своим софтом - переход с базы на базу редкость и это серьезное решение.
У меня был переход с InterBase на MSSQL2000 в крупном учебном центре.
Занял переход 3 дня. Клиенты практически не менялись - только один обьект - соединение к другой базе. Ибо все остальное например
"select ..." или "exec ..." без изменений. А переписать синтаксис процедур
даже просто и приятно - лишни раз синтаксис повториш.

В сравнении - например нам принесли демку системы клиент-банк.
Крутая типа куча баз MySQL, Oracle, MSSQL. Ну поставил я на Oracle - ни одного пакета, ни одной функции или триггера. Использовать такой сервер
как хранилище табличек - извращение. А требования для клиента немеренные и сетку трафиком забивает - врагу не пожелаеш. Примочка - DBMS. А кому это надо. Да для продажи круто - бедные узвери.


Ну думаю все это субьективные мнения и все остальное превращается во флейм. По крайней мере у задавшего вопрос есть пару вариантов пусть пробует. Удачи.
...
Рейтинг: 0 / 0
25.06.2004, 13:22
    #32577381
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
> На предприятиях со своим софтом - переход с базы на базу редкость и это
> серьезное решение.

Предприятие - вообще субстанция изменчивая. И на моей памяти таких переходов было достаточно.

> У меня был переход с InterBase на MSSQL2000 в крупном учебном центре.
> Занял переход 3 дня.

Простенькая информационная система промышленного применения - табличек 500… 700. Очень хочется посмотреть, как Вы за три дня переведете ее на другую платформу.

> В сравнении - например нам принесли демку системы клиент-банк.

Вы эту систему не разрабатывали, не поддерживали и не обслуживали. С чем что сравниваем?

> Крутая типа куча баз MySQL, Oracle, MSSQL. Ну поставил я на Oracle - ни одного
> пакета, ни одной функции или триггера.

А Вы не задумались, почему именно так написано?

> Использовать такой сервер
> как хранилище табличек - извращение.

Видимо, разработчики так не думали. Imho, правильно делали.

> А требования для клиента немеренные и
> сетку трафиком забивает - врагу не пожелаеш.

А вот это уже кривой дизайн.

> Ну думаю все это субьективные мнения и все остальное превращается во флейм.

А здесь других мнений не бывает. И флеймом пока не пахнет.
...
Рейтинг: 0 / 0
28.06.2004, 15:33
    #32579695
Bumpo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
IMHO last two posts - is lazy suckers sheet. No help no ideads
- but many words
...
Рейтинг: 0 / 0
05.07.2004, 21:42
    #32590283
centur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
guest_20040621
в ваших постах кроме общей воды на тему - как красиво делать все универсально, многоуровнево и пр пр пр нету ни одной дельной мысли или совета. Имхо, это дилетантство, тем более под гестом.
все мы умные и начитались книжек про сложные теоретические модели и прочую слоеную бурду. А вот как доходит дело до реализации - все и всплывает, и осознаешь, после 5 лет обучения в институте - как далека теория от практики. И все умные книжки про моделирование систем не несут никаких идей для практического применения. Хотя бы намеков... теория красива, а вот в реализации - уродлива.
Следуя принципам ХР (eXtreme Programming) - программа должна выполнять поставленую перед ней задачу, а реализация чем проще - тем лучше.
...
Рейтинг: 0 / 0
07.07.2004, 15:14
    #32593628
guest_20040621
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
> в ваших постах кроме общей воды на тему - как красиво делать все
> универсально, многоуровнево и пр пр пр нету ни одной дельной мысли или
> совета.

Все есть, читайте внимательнее. Если нужны конкретные схемы и реализации - $120 академический час по предварительной записи. При условии, что мне Ваша проблема покажется интересной.

> Имхо, это дилетантство, тем более под гестом.

Не читайте, в чем проблема?

> все мы умные и начитались книжек

Судя по вопросам и большинству ответов - к сожалению, не все.

> И все умные книжки про моделирование систем не несут никаких идей для
> практического применения.

Да ну? Что-то не то Вы читаете. Все, что нужно, есть у Дейта. Абсолютно. Дальше - исключительно проблемы предметной области + немного стандартов.

> Следуя принципам ХР (eXtreme Programming) - программа должна выполнять
> поставленую перед ней задачу, а реализация чем проще - тем лучше.

Хм... дружище, Вы действительно читаете не те книжки. Забудьте про XP, - это часть UP, причем, тупо выдранная из контекста. Оно Вам надо?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.07.2007, 18:57
    #34693948
Paramedic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
Добрый день.

У меня вопросик, как раз по теме.

Я сам всегда пишу функции, для вставки, апдейта и удаления.

Столкнулся со следующим. Завёл нового пользователя. Дал права на функции. Ничего не работает. Пока не дал права на все таблицы, триггеры и прочее, используемое в этих функциях.

Оно так и должно работать, или я что-то не так сделал?


Второе: вьюхи это несомненно хорошо. Но я всё же не понимаю, как ими пользоваться в многопользовательском режиме? Ведь для каждого пользователя получается надо писать свою вьюху?
...
Рейтинг: 0 / 0
30.07.2007, 22:10
    #34694181
st_serg_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разделение прав доступа
см. док на предмет create function ... security invoker | security definer
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разделение прав доступа / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]