New buildin function

Поиск
Список
Период
Сортировка
От Olleg Samoylov
Тема New buildin function
Дата
Msg-id Pine.LNX.4.33.0301241019210.3485-100000@jane.telecom.mipt.ru
обсуждение исходный текст
Ответ на Re: New buildin function  (Rod Taylor <rbt@rbt.ca>)
Ответы Re: New buildin function  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
Список pgsql-hackers
On 23 Jan 2003, Rod Taylor wrote:

RT>On Wed, 2003-01-22 at 08:09, Olleg Samoylov wrote:
RT>> Hi!
RT>>
RT>> What about adding new function:
RT>> pg_uid()
RT>> pg_session_uid()
RT>>
RT>> as reference to internal function GetUserId() and GetSessionUserId().
RT>>
RT>> These can help useful, for instance in row based securety.
RT>
RT>Do CURRENT_USER and SESSION_USER not give those values?

Nope. CURRENT_USER and SESSION_USER return username. Sometimes need uid,
it's key usesysid in table pg_shadow, for instance, for row based
permissions. Explain in example:

create table role {  role smallinteger,   -- analog group of users  name text
}

create table permission { -- link role with pg_user  uid integer references pg_user(usesysid),  role smallint
referencesrole
 
}

create table protected_table {
-- payload fields
access  smallint references role,
author_of_last_changes integer references pg_user(usesysid) default
PG_SESSION_UID(),  -- proposed function
time_of_last_changes timestamp not null default current_timestamp
}

create function update_trigger_function() returns opaque as '
begin    -- PG_UID() proposed function
if (select role from role where uid=PG_UID())=old.access then new.time_of_last_changes=current_timestamp;
new.author_of_last_changes=PG_SESSION_UID(); -- proposed function return new;
 
else return null;
end if;
end;
' language 'plpgsql';

create trigger update_trigger before update on protected table for each row
execute procedure update_trigger_function();

Сertainly, I can create such function in my own project as:

create function pg_uid() returns integer as '
select usesysid from pg_user where usename=current_user;
' language 'sql';

Or as C function:

long pg_uid()
{ return GetUserId();
}

But, IMHO, such fuction must be common.

-- 
Olleg Samoylov



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "David Kennedy"
Дата:
Сообщение: postgres installation - best configuration?
Следующее
От: Michael Meskes
Дата:
Сообщение: Re: ECPG, threading and pooling