|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
непонятная работа has_function_privilege доступа к базе у юзера нет, а права на выполнение функции есть Код: plsql 1. 2. 3. 4. 5.
Кто-нибудь может прокомментировать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 12:24 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
pg000 непонятная работа has_function_privilege доступа к базе у юзера нет, а права на выполнение функции есть Код: plsql 1. 2. 3. 4. 5.
Кто-нибудь может прокомментировать ? А почему нет? Это несвязанные уровни доступа. Например в какой ситуации это может быть надо: psql -U postgres -d mydb1 становимся пользователем myuser1 set role myuser1; далее от myuser1 выполняем хранимку нужную при том что у myuser1 нет права на коннект. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 13:15 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
Хорошо, не будем привязываться к connect Создаём новую базу и убираем права роли PUBLIC (чтобы не мешались) Код: plsql 1. 2. 3. 4. 5.
Также убираем права на схему PUBLIC роли PUBLIC (чтобы не мешались) И получаем разное поведение has_table_privilege и has_function_privilege Код: 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.
На просмотр данных из таблицы прав нет, а на выполнение функции есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 14:06 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
Опаньки, всё по документации, но крайне неожиданно. CREATE FUNCTION Также следует помнить о том, что по умолчанию право выполнения для создаваемых функций имеет роль PUBLIC автоматом (за подробностями обратитесь к GRANT). GRANT PostgreSQL по умолчанию назначает группе PUBLIC определённые права для некоторых типов объектов. Для таблиц, столбцов, последовательностей, обёрток сторонних данных, сторонних серверов, больших объектов, схем или табличных пространств PUBLIC по умолчанию никаких прав не имеет. Для других типов объектов PUBLIC имеет следующие права по умолчанию: CONNECT и TEMPORARY (создание временных таблиц) для баз данных; EXECUTE — для функций, USAGE — для языков и типов данных (включая домены). Можно удивиться посмотрев в базах Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 15:03 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
pg000, Поскольку функция по умолчанию выполняется с правами того кто её запускает то никаких доступов к таблицам или ещё чему которых нет у запускающего функцию - не образуется. Поэтому и public доступ есть к функции по умолчанию на выполнение. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 19:24 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
Это по умолчанию. Но есть же функции с SECURITY DEFINER CREATE FUNCTION Получается, чтобы понять может ли что-то поменять функция нужно смотреть исходный код. При большом количестве функций это уже нужно писать код для такой проверки. Ведь никаких намёков даже при pg_dump Код: 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.
Или нужно взять за привычку сразу же после создания функции выполнять. Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 20:29 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
pg000, Про security definer там вообще много gotchas есть включая подмену search_path например и предполагается что тот кто их пишет внимательно прочитал и осознал всё что написано в https://www.postgresql.org/docs/14/sql-createfunction.html#SQL-CREATEFUNCTION-SECURITY и в общем grant for publiс там не самая большая опасность. Т.е. security definer функции должны проходить весьма отдельный и внимательный security audit. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 21:47 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
Ну я вот не сторонник "административных" решений. Мне вот понравилось когда-то... Решений здесь два: радикальное и правильное. Радикальное - покарать нерадивого разработчика физически (сделайте ему массаж почек и печени), морально (устроить публичную психологическую порку), финансово (лишите премии). Но вы же понимаете, что все это плохо и поселит в глубине “чуткой” души разработчика обиду на вас. Может он был уставшим и просто недоглядел - бывает такое? Конечно бывает! Поэтому, решение правильное - автоматизируйте проверку кода Возможно ещё на новых базах. Код: plsql 1. 2. 3. 4.
Или на новых базах для будущих schema вообще вешать EVENT TRIGGER Код: plsql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 22:59 |
|
has_function_privilege - непонятная работа
|
|||
---|---|---|---|
#18+
pg000 Ну я вот не сторонник "административных" решений. Мне вот понравилось когда-то... Решений здесь два: радикальное и правильное. Радикальное - покарать нерадивого разработчика физически (сделайте ему массаж почек и печени), морально (устроить публичную психологическую порку), финансово (лишите премии). Но вы же понимаете, что все это плохо и поселит в глубине “чуткой” души разработчика обиду на вас. Может он был уставшим и просто недоглядел - бывает такое? Конечно бывает! Поэтому, решение правильное - автоматизируйте проверку кода Возможно ещё на новых базах. Код: plsql 1. 2. 3. 4.
Или на новых базах для будущих schema вообще вешать EVENT TRIGGER Код: plsql 1. 2. 3. 4. 5. 6. 7.
Тогда ещё проверку установки search_path для security definer хранимко надо делать. Через проверку select proname, proconfig from pg_proc where prosecdef; Идею автоматического убирания прав на public в принципе поддерживаю но гемороя с ручной раздачей прав оно добавит преизрядно. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 23:21 |
|
|
start [/forum/topic.php?fid=53&msg=40132800&tid=1993665]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 129ms |
0 / 0 |