Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логика прав на функции внутри view / 4 сообщений из 4, страница 1 из 1
14.07.2020, 15:15
    #39979516
Dany305
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логика прав на функции внутри view
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
set role to postgres; 
drop view if exists test_view.view_v;
drop schema if exists test_view;
drop function if exists test_func.func();
drop schema if exists test_func;

create schema test_view;
create schema test_func;

create or replace function test_func.func() returns integer
as 'select 1 from pg_sleep(2);' language sql;
revoke all on function test_func.func() from public;

create view test_view.view_v as select * from test_func.func();
revoke all on table test_view.view_v from public;

grant usage on schema test_view to srv_dc; 
grant select on test_view.view_v to srv_dc; 

-- 1)
set role to srv_dc; 
select * from test_view.view_v
-- ERROR:  permission denied for function func

-- 2)
reset role;
grant execute on function test_func.func() to srv_dc; 
set role to srv_dc; 
select * from test_view.view_v;
-- ok

--3)
set role to srv_dc; 
select * from test_func.func();
-- ERROR:  permission denied for schema test_func



Хотим, чтобы пользователь srv_dc мог обращаться к test_view.view_v, но не мог вызывать test_func.func() напрямую

Какая логика стоит за необходимостью назначать права на функции, вызываемые из view?
Почему прав владельца недостаточно? Где про эту логику прочитать?
...
Рейтинг: 0 / 0
15.07.2020, 09:24
    #39979733
О-О-О
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логика прав на функции внутри view
Dany305,

С правами все запутано.
Но хорошо описано в книге PostgreSQL 11 (Ганс-Юрген Шёнинг = Глава 8)
и в книге PostgreSQL 10 (Салахалдин Джуба, Андрей Волков = Глава 11)

Это как рекурсивный запрос в 4 этажа. В общем очень запутанно.
Но есть выход - создаются разные группы/права и вкладываются как матрешка.
то есть одной группе можно назначить кучу прав в результате он может делать то что и требовалось.
Я с наскоку в общем то понял, но вот там это так закручено. В общем, читайте 2-3 дня и вопрос решите. Явно быстрее чем на форуме.

В общем, в инструкции по постгрес все очень слабо расписано. В книгах выше все разжевано довольно понятно и доступно.
Эта тема очень специфична. Обычно доступ делается через сайт, либо на локальной машине или через внешнюю оболочку программы (Python).
.
...
Рейтинг: 0 / 0
15.07.2020, 10:24
    #39979766
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логика прав на функции внутри view
Dany305,

почитать естественно в документации https://www.postgresql.org/docs/9.4/rules-privileges.html
"Relations that are used due to rules get checked against the privileges of the rule owner, not the user invoking the rule." - но это касается только relations но не функций, у них своя проверка на права.

есть некоторое подозрение что "Хотим, чтобы пользователь srv_dc мог обращаться к test_view.view_v, но не мог вызывать test_func.func() напрямую" можно сделать только так как вы сделали...

ps: а от кого должна запускаться функция test_func.func при вызове ее пользователем srv_dc через view test_view.view_v ?
от srv_dc ? от postgres?
...
Рейтинг: 0 / 0
15.07.2020, 18:26
    #39980082
Dany305
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логика прав на функции внутри view
Maxim Boguk
Dany305,

почитать естественно в документации https://www.postgresql.org/docs/9.4/rules-privileges.html
"Relations that are used due to rules get checked against the privileges of the rule owner, not the user invoking the rule." - но это касается только relations но не функций, у них своя проверка на права.

ну хорошо, про relations что-то есть, хотя и маловато, а про функции где?

есть некоторое подозрение что "Хотим, чтобы пользователь srv_dc мог обращаться к test_view.view_v, но не мог вызывать test_func.func() напрямую" можно сделать только так как вы сделали...
да, кажется только так, но выглядит странновато - execute есть, а usage нет

ps: а от кого должна запускаться функция test_func.func при вызове ее пользователем srv_dc через view test_view.view_v ?
от srv_dc ? от postgres?
я не написал, но предполагается, что функция test_func.func security definer, т.е. от ее владельца - postgres
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логика прав на функции внутри view / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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