powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логика прав на функции внутри view
4 сообщений из 4, страница 1 из 1
Логика прав на функции внутри view
    #39979516
Dany305
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Логика прав на функции внутри view
    #39979733
О-О-О
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dany305,

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

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

В общем, в инструкции по постгрес все очень слабо расписано. В книгах выше все разжевано довольно понятно и доступно.
Эта тема очень специфична. Обычно доступ делается через сайт, либо на локальной машине или через внешнюю оболочку программы (Python).
.
...
Рейтинг: 0 / 0
Логика прав на функции внутри view
    #39979766
Фотография 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 но не функций, у них своя проверка на права.

есть некоторое подозрение что "Хотим, чтобы пользователь 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
Логика прав на функции внутри view
    #39980082
Dany305
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логика прав на функции внутри view
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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