|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
Я портирую код с MSSQL/MySQL на Postgre и столкнулся с "замечательной" особенностью этой СУБД: любой созданный пользователь (через CREATE ROLE LOGIN) имеет по умолчанию EXECUTE доступ ко всем функциям БД!!! Причем к таблицам - нет. Для меня загадка почему так, но вопрос как решить. Мне нужно, чтобы вновь созданный пользователь по умолчанию не имел доступа ни к чему в моей БД и я сам назначал ему права. Поиск дал такой вариант: revoke execute on function <name> from public; это работает, но если у меня много функций, то не хочется вызывать это для каждой. ALTER default privileges revoke execute on functions from public; - вообще не дает эффекта есть какой-то красивый и надежный вариант? Или создать пользователя через CREATE ROLE таким образом, чтобы он не наследовал от PUBLIC ничего. Я пробовал NOINHERIT, но толку нет. Я новичек в postgre - просьба помочь. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 09:36 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
victorov1 Я портирую код с MSSQL/MySQL на Postgre и столкнулся с "замечательной" особенностью этой СУБД: любой созданный пользователь (через CREATE ROLE LOGIN) имеет по умолчанию EXECUTE доступ ко всем функциям БД!!! Причем к таблицам - нет. Для меня загадка почему так, но вопрос как решить. Мне нужно, чтобы вновь созданный пользователь по умолчанию не имел доступа ни к чему в моей БД и я сам назначал ему права. Поиск дал такой вариант: revoke execute on function <name> from public; это работает, но если у меня много функций, то не хочется вызывать это для каждой. ALTER default privileges revoke execute on functions from public; - вообще не дает эффекта есть какой-то красивый и надежный вариант? Или создать пользователя через CREATE ROLE таким образом, чтобы он не наследовал от PUBLIC ничего. Я пробовал NOINHERIT, но толку нет. Я новичек в postgre - просьба помочь. Спасибо. А какую проблему вы видите в том что "имеет по умолчанию EXECUTE доступ ко всем функциям БД"? К данным к которым у него нет доступа он и так не доберётся а исходники хранимок он всегда сможет посмотреть поэтому закрывать доступ к хранимкам которые смысла особого нет. "Мне нужно, чтобы вновь созданный пользователь по умолчанию не имел доступа ни к чему в моей БД" - так закройте доступ именно к вашей конкретной базе для PUBLIC в целом. Public доступ имеют все пользователи и всегда это псевдороль которую отобрать нельзя. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 10:47 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
А какую проблему вы видите в том что "имеет по умолчанию EXECUTE доступ ко всем функциям БД"? Издеваетесь??? Это огромная брешь в безопасности. Особенно если функция создана с опцией SECURITY DEFINER Т.е. создали юзера, никаких прав ему еще не давали, а он на тебе - уже все может делать в БД! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 11:27 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
это я читал какое в итоге решение для "закройте доступ именно к вашей конкретной базе для PUBLIC в целом"? REVOKE ALL ON DATABASE mydatabase FROM PUBLIC; это не дает возможности подконнектиться к БД, но когда даем GRANT CONNECT, то пользователь получает и доступ EXECUTE ме нужно что-то типа REVOKE EXECUTE ON ALL FUNCTIONS TO DATABASE mydatabase FROM PUBLIC; но такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 11:38 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
victorov1 это я читал какое в итоге решение для "закройте доступ именно к вашей конкретной базе для PUBLIC в целом"? REVOKE ALL ON DATABASE mydatabase FROM PUBLIC; это не дает возможности подконнектиться к БД, но когда даем GRANT CONNECT, то пользователь получает и доступ EXECUTE мне нужно что-то типа REVOKE EXECUTE ON ALL FUNCTIONS TO DATABASE mydatabase FROM PUBLIC; но такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 11:38 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
пробую: \с mydatabase REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA PUBLIC FROM PUBLIC; вроде то что нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 11:47 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
Стоит отметить, что при создании новой функции, автоматом EXECUTE выдается public-ку. Т.е. после создания новой функции надо по новой делать отзыв привилегий для нее. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 12:32 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
Guzya Стоит отметить, что при создании новой функции, автоматом EXECUTE выдается public-ку. Т.е. после создания новой функции надо по новой делать отзыв привилегий для нее. это уже увидел, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 12:36 |
|
REVOKE EXECUTE ON FUNCTION
|
|||
---|---|---|---|
#18+
victorov1 А какую проблему вы видите в том что "имеет по умолчанию EXECUTE доступ ко всем функциям БД"? Издеваетесь??? Это огромная брешь в безопасности. Особенно если функция создана с опцией SECURITY DEFINER Т.е. создали юзера, никаких прав ему еще не давали, а он на тебе - уже все может делать в БД! На таком уровне доступов я бы начинал с https://blog.crunchydata.com/blog/postgresql-defaults-and-impact-on-security-part-1 и далее с https://blog.crunchydata.com/blog/postgresql-defaults-and-impact-on-security-part-2 (CVE-2018-1058 - вообще прикольная дырка да). Там много чего интересного помимо того что вы написали вылезает. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2021, 12:44 |
|
|
start [/forum/topic.php?fid=53&msg=40096311&tid=1993871]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 368ms |
0 / 0 |