powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Postgresql. Учетка администратора и пользователя
4 сообщений из 4, страница 1 из 1
Postgresql. Учетка администратора и пользователя
    #39764724
Visermoz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Возникла задача разделить права на доступ к БД:
*Первый пользователь, несуперпользователь, владелец базы и всех её объектов можно выполнять в базе любые операции, кроме создания новых учеток.
*Второй пользователь может только создавать учетки и давать им права как у первого пользователя, но доступ к данным не должен иметь.
Имея право CREATEROLE, этот второй пользователь без проблем назначает себе роль первого пользователя через GRANT и SET ROLE, имеющего доступ к данным и после этого может менять и просматривать все данные. В документации сказано, что право CREATEROLE сравнимо с правами суперпользователя почти.

Имеется ли какой-нибудь механизм, с помощью которого можно реализовать такую схему?
Согласен, что Postgres ведет себя логично: если имеешь право создавать роли и давать права, то можешь и себе назначить.
Но было бы здорово если бы получилось запретить давать права себе или запретить выполнять SET ROLE.
...
Рейтинг: 0 / 0
Postgresql. Учетка администратора и пользователя
    #39764727
Visermoz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока сделал вариант через функцию с 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.
CREATE ROLE account_manager LOGIN
  ENCRYPTED PASSWORD 'md5204eb651ab83a732b755635959552388'
  NOSUPERUSER NOINHERIT NOCREATEDB NOCREATEROLE NOREPLICATION CONNECTION LIMIT 3;

GRANT CONNECT ON DATABASE isogd TO account_manager WITH GRANT OPTION;

CREATE FUNCTION my.create_user(uname TEXT,pass TEXT)
RETURNS void
AS
$$
BEGIN
execute 'create user '||uname||' with password '''||pass||'''';
execute 'grant user_role to '||uname;
raise info '%','ok';
exception when others then null;
END;
$$  LANGUAGE plpgsql
    SECURITY DEFINER;
grant usage on schema my to account_manager;
grant execute on function my.create_user(text,text) to account_manager;

CREATE FUNCTION my.drop_user(uname TEXT)
RETURNS void
AS
$$
BEGIN
execute 'drop user '||uname;
raise info '%','ok';
exception when others then null;
END;
$$  LANGUAGE plpgsql
    SECURITY DEFINER;

grant execute on function my.drop_user(text) to account_manager;




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


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