разделение прав между пользователями

Драга
Дата: 12.05.2004 10:44:21
подниму еще раз тему:
как грамотно разделить права между пользователями?

мне нужно чтобы пользователь А и В, подключившись к базе и выполнив команду select * from table получили каждый свой набор данных.
Hordi
Дата: 12.05.2004 12:49:18
Вообще-то такие вещи нужно выносить из базы, но если сильно хочеться, то можно написать серверную функцию(plsql,c), которая будет проверять права и выполнять соответствующий запрос. Соответственно, в эту функцию нужно передавать имя пользователя.
Wireless
Дата: 12.05.2004 12:52:40
Нужно сделать для каждого пользователя свое представление (VIEW
на этой table),
и далее, например, пользователь А должен знать что он - именно
пользователь A и делать select * from table_view_A.

Если не ошибаюсь, в одной и последний версий PostgreSQL
у процедур/функций появилась возможность возвращать множества
значений. Здесь точно не знаю, проверь, м.б. стоит копать в эту
сторону, если функциональность БД позволит сделать то, что тебе нужно.
centur
Дата: 19.05.2004 22:52:50
2hordi а почему вы считаете что внешние приложения (особенно тонкие клиенты) надежнее и быстрее внутренних механизмов постгерса. Это не флейм - просто интересно узнать мнение.


Offtopic 2Shweik: как с вами можно связаться -по мылу в профиле - нет ответа . ICQ? another mail ? Хотелось бы побеседовать. А форум не позволяет посылать личные сообщения.
Hordi
Дата: 25.05.2004 10:09:13
>hordi а почему вы считаете что внешние приложения (особенно тонкие клиенты) надежнее >и быстрее внутренних механизмов постгерса. Это не флейм - просто интересно узнать >мнение.

Здесь ни о каких внутренних механизмах и речи нет. Как ты делаешь в реальном клиенте:
грузится таблица прав на юзера, далее по конкретному праву выбирается таблица или какой-то запрос, который будет выполняться для пользователя, задержек никаких, простейший мгновенный поиск по памяти клиентского компа. А как должна работать в таком случае база: мало того, что и так проверяются права доступа на элементы запроса (таблицы, уникальные последовательности и т.п.), так еще нужно знать какой запрос для клиента должен выполнится... В крупном проекте это значительно усложнит понимание работы, да и не нужно все это, проще запрос изменить явно. База должна делать только необходимое, остальное можно и на клиенте реализовать.
Petro123
Дата: 25.05.2004 17:06:05
Странно, а почему в Access есть разграничение прав "внутри СУБД". С точки зрения безопасности не логично предоставлять правО говорить - "Кто ТЫ?" - клиенту! IMHO
Petro123
Дата: 25.05.2004 17:08:49
Хотя, вру - не заметил, что речь идёт не о доступе к таблице, а о доступе к отдельным полям таблицы. Access делает .... к таблице.
?
Дата: 25.05.2004 17:43:16
а почему не обсуждается RULE-s-ы ? казалось бы должен прокатывать изящней множества запросов.
че-нть типа
SELECT Case When (function_user_right() = 0) then
(SELECT ...
ну и т.п.

при этом несложно сделать одноименные поля вывода (не обязательно что-то возвращая из данных) для всех выходных наборов данных, т.е. клиент с ними справится без хитрой логики. Надо только проверять обновляемость полей.
в рулях (но на инсерт и апдейт), видимо можно и права на обновление разделить по-колоночно.
OAN
Дата: 25.05.2004 19:16:44
>> а почему не обсуждается RULE-s-ы ?
это то-же самое, что сваять VIEW (Wireless, я с тобой полностью согласен!).
"... Rules and Views

Presently, ON SELECT rules must be unconditional INSTEAD rules and must have actions that consist of a single SELECT query. Thus, an ON SELECT rule effectively turns the table into a view, whose visible contents are the rows returned by the rule's SELECT query rather than whatever had been stored in the table (if anything). It is considered better style to write a CREATE VIEW command than to create a real table and define an ON SELECT rule for it. ..."

Только вот как-бы это все побыстрее сделать, например возвращать принципиально разные селекты (разные в количестве записей и разные в значениях колонок) в зависимости от принадлежности юзера конкретной группе пользователей?
Я это к тому, что как сделать правило (или отображение), которое сначала определяло доступ к данным, а потом возвращало соответствующие готовые выборки из таблиц(ы), без конструкций с CASE...END на каждую запись таблиц(ы)?
В доках (на ПГ7.3) сказано, что нельзя сделать больше одного правила на SELECT из отношения :(
OAN
Дата: 25.05.2004 20:04:47
может попробовать:

SELECT 'Все путем' AS res WHERE доступ='Ок'
UNION ALL
SELECT 'А кто вы такой?' AS res WHERE доступ<>'Ок';

в написании отображения?