|
Postgresql. Учетка администратора и пользователя
|
|||
---|---|---|---|
#18+
Добрый день. Возникла задача разделить права на доступ к БД: *Первый пользователь, несуперпользователь, владелец базы и всех её объектов можно выполнять в базе любые операции, кроме создания новых учеток. *Второй пользователь может только создавать учетки и давать им права как у первого пользователя, но доступ к данным не должен иметь. Имея право CREATEROLE, этот второй пользователь без проблем назначает себе роль первого пользователя через GRANT и SET ROLE, имеющего доступ к данным и после этого может менять и просматривать все данные. В документации сказано, что право CREATEROLE сравнимо с правами суперпользователя почти. Имеется ли какой-нибудь механизм, с помощью которого можно реализовать такую схему? Согласен, что Postgres ведет себя логично: если имеешь право создавать роли и давать права, то можешь и себе назначить. Но было бы здорово если бы получилось запретить давать права себе или запретить выполнять SET ROLE. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 08:03 |
|
Postgresql. Учетка администратора и пользователя
|
|||
---|---|---|---|
#18+
Пока сделал вариант через функцию с SECURITY DEFINER созданной под суперпользователем. Код: 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.
У администратора учетных записей есть права только на подключение и выполнение этих двух функций. Проверил. Результат подходит ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 08:29 |
|
Postgresql. Учетка администратора и пользователя
|
|||
---|---|---|---|
#18+
VisermozПока сделал вариант через функцию с SECURITY DEFINER созданной под суперпользователем. Нормальный вариант. Только почитайте про права по умолчанию для псевдороли public (а следовательно любого пользователя). Для security_definer функций следует еще и revoke execute from public делать. https://postgrespro.ru/docs/postgresql/11/sql-grant PostgreSQL по умолчанию назначает группе PUBLIC определённые права для некоторых типов объектов. Для таблиц, столбцов, последовательностей, обёрток сторонних данных, сторонних серверов, больших объектов, схем и табличных пространств PUBLIC по умолчанию никаких прав не имеет. Для других типов объектов PUBLIC имеет следующие права по умолчанию: CONNECT и TEMPORARY (создание временных таблиц) для баз данных; EXECUTE — для функций и процедур ; USAGE — для языков и типов данных (включая домены). Владелец объекта, конечно же, может отозвать (посредством REVOKE) как явно назначенные права, так и права по умолчанию. (Для максимальной безопасности команду REVOKE нужно выполнить в транзакции, создающей объект; тогда не образуется окно, в котором другой пользователь сможет обратиться к объекту.) Кроме того, эти изначально назначаемые права по умолчанию можно изменить, воспользовавшись командой ALTER DEFAULT PRIVILEGES. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2019, 12:48 |
|
|
start [/forum/topic.php?fid=53&gotonew=1&tid=1995384]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 150ms |
0 / 0 |