From: | silly_sad <sad(at)bankir(dot)ru> |
---|---|
To: | sftf <sftf-misc(at)mail(dot)ru> |
Cc: | pgsql-ru-general(at)postgresql(dot)org, pronix pronix <pronix(dot)service(at)gmail(dot)com> |
Subject: | Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Роли: управление доступом к другим ролям. Роли как объекты системы безопасности. |
Date: | 2008-07-03 13:05:30 |
Message-ID: | 486CCE9A.3070004@bankir.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
sftf wrote:
> Но нет механизма контроля прав доступа одной роли по отношению к другой.
> Проблема #1: неуправляемые права ролей с привиоегией CREATEROLE по отношению к другим не суперюзерским ролям.
> Проблема #2: ограниченые возможности по котнролю присвоения ролей.
create table usr (
name text primary key,
privileges text
);
create function create_usr (text, text) returns int as $$
declare priv text;
begin
select into priv privileges from usr where name=session_user;
if not my_mega_system_is_admin(priv) then
return 0;
end if;
create role $1 nosuperuser nocreaterole;
insert into usr values ($1,$2);
end;
$$ language plpgsql security definer;
это только СХЕМАТИЧЕСКИЙ ПРИМЕР.
Идея в следущем.
Вы свои привилегии которыми хотите наделить юзеров храните в своей
специально (идеально) предназначенной для этого таблице И все ваши
админы и неадмины НЕ суперюзеры И управляете содержимым этой таблицы при
помощи SECURITY DEFINER функции, которая основываясь на данных о
привилегиях либо создаёт для вас юзера либо не создаёт.
Разумеется функций будет не одна и их можно зацепить за триггеры.
и вообще расширить систему прав КАК ПОЖЕЛАЕТЕ.