Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ограничить SELECT из таблицы при помощи внешней проверки? / 7 сообщений из 7, страница 1 из 1
11.07.2006, 12:50
    #33844691
Vladimir A. Petrov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить SELECT из таблицы при помощи внешней проверки?
Имеем таблицу вида:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE stats
(
  username varchar( 256 ) NOT NULL,
  "time" int8 NOT NULL,
  duration int4 NOT NULL,
  phonenumber varchar( 20 ) NOT NULL,
  и так далее ...
)

Также имеем функцию вида:

Код: plaintext
1.
2.
3.
4.
CREATE OR REPLACE FUNCTION auth("varchar", "varchar")
  RETURNS bool AS '
...
' LANGUAGE 'plperlu' VOLATILE;

Здесь первый аргумент - имя пользователя, второй - пароль. Функция возвращает истину в случае корректности имени пользователя и пароля, иначе возвращает ложь.

Имеется пользователь, который должен делать только SELECT из таблицы "stats".

Вопрос:

Как ограничить доступ к таблице "stats" этому пользователю таким образом, чтобы он был в состоянии делать выборку только ограниченного набора полей из таблицы "stats" и только строки с именами пользователей, для которых он знает правильные пароли, проверяемые через вызов функции auth()?

Про себя: PostgreSQL 7.4.11
...
Рейтинг: 0 / 0
11.07.2006, 13:45
    #33844918
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить SELECT из таблицы при помощи внешней проверки?
Код: plaintext
1.
select * from stats
where auth(username,@password)

???

-----------------------------------------------------------------------------------------------------------------------------------------
З.Ы.
Неспешно ищу работу, согласен на переезд в Москву или Питер
...
Рейтинг: 0 / 0
11.07.2006, 20:47
    #33846273
Как ограничить SELECT из таблицы при помощи внешней проверки?
> Как ограничить доступ к таблице "stats" этому пользователю таким образом,
> чтобы он был в состоянии делать выборку только ограниченного набора полей из
> таблицы "stats"

Imho штатными средствами PostgreSQL - никак.
...
Рейтинг: 0 / 0
12.07.2006, 11:01
    #33847078
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить SELECT из таблицы при помощи внешней проверки?
PostgreSQL начинающий> Как ограничить доступ к таблице "stats" этому пользователю таким образом,
> чтобы он был в состоянии делать выборку только ограниченного набора полей из
> таблицы "stats"

Imho штатными средствами PostgreSQL - никак.Я с этим не сталкивался, но судя по топикам в форуме, можно через view. search=view+права
...
Рейтинг: 0 / 0
12.07.2006, 11:07
    #33847110
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить SELECT из таблицы при помощи внешней проверки?
Владимор Конев
Код: plaintext
1.
select * from stats
where auth(username,@password)

Код: plaintext
1.
видимо такИ так:
where auth(username,@password, table_id)

2 pgsql-нач-у: например работает:
Код: plaintext
1.
2.
3.
4.
CREATE VIEW vw_test AS SELECT * FROM test;
CREATE OR REPLACE RULE "_RETURN" AS
   ON SELECT TO vw_test
   DO INSTEAD 
SELECT * FROM f_test_into();
т.е., если вместо
SELECT * FROM f_test_into()
напИсать:
SELECT * FROM test WHERE auth(username,@password, table_id)
- получим построчный допуск.
неудобство - придется писать RULE на INSERT и UPDATE. + руле, кажется, будут медленнее работы с таблицами.
(у меня задача хуже - получить построчный допуск в зависимости не от юзера, а от сеанса приложения, причем приложение (МСаксесс через джет) не отличается постоянством - может открывать коннекты по своему усмотрению (т.е. сеанс приложения <> [сеанс] коннект приложения к серверу).
...
Рейтинг: 0 / 0
12.07.2006, 12:38
    #33847617
Vladimir A. Petrov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ограничить SELECT из таблицы при помощи внешней проверки?
Спасибо всем!

Решено:

Код: plaintext
1.
2.
3.
4.
5.
CREATE TYPE stats_data AS  (
    "time" int8,
    duration int4,
    phonenumber varchar( 20 ),
    ...
);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE OR REPLACE FUNCTION get_stats("varchar", "varchar", int4, int4)
RETURNS SETOF stats_data AS
'DECLARE
  user     alias for $1;
  passwd alias for $2;
  ...
BEGIN
  ...
  IF not auth(user, passwd)
  THEN
    RAISE EXCEPTION ''Authentification failed.';
  END IF;
  ...
END;'
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;

Проблема моя была в том, что 'SECURITY DEFINER' я как-то сразу в документации не заметил.
...
Рейтинг: 0 / 0
12.07.2006, 14:12
    #33848069
Как ограничить SELECT из таблицы при помощи внешней проверки?
> например работает:

Действительно работает. Спасибо за комментарий.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ограничить SELECT из таблицы при помощи внешней проверки? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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