-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


[ ] PostgreSQL

, 31 2017 . 17:32 +


, . . , .


1.


- , .


: . , , " ". . , 9.5 row-level security, , , JOIN.


LDAP, PAM, GSSAPI .


2.


. . . , . , :


  1. , .
  2. , , .
  3. , , , - , , , , .

, .


3.


. : , , . GD, Pl/Python:


create or replace
function set_current_user_id(user_id integer) as $$
  GD['user_id'] = user_id
$$ language plpythonu;

:


create or replace
function login(user_ text, password_ text) returns integer as $$
declare
  vuser_id integer; vis_admin boolean;
begin
  select id, is_admin
    into vuser_id, is_admin
    from users where login = login_ and password = password_;

  if found then
    perform set_current_user_id(vuser_id);
    /*   set_is_admin() 
         set_current_user_id() */
    perform set_is_admin(vis_admin);
  else
    raise exception 'Invalid login or password';
  end if;

  return vuser_id;
end;
$$ language plpgsql security definer;

, ID :


create or replace
function get_current_user_id() returns integer as $$
  return GD.get('user_id')
$$ language plpythonu stable;

, . . , . :


create or replace
function delete_branch(branch_id_ integer) returns void as $$
begin
  if not current_user_is_admin() then
    raise exception 'Access denied: this operation needs admin privileges';
  end if;
  ...
end;
$$ language plpgsql;

, , , , , , (branch_id).


create or replace
function get_accounts() returns table (account_number text) as $$
begin
  return query
  select a.account_number
    from accounts a
    join users u on u.branch_id = a.branch_id
   where u.id = get_current_user_id();
end;
$$ language plpgsql;

? :


  1. , , .
  2. .
  3. , , .
  4. , , — , , - , , , .

, :


  1. ( , ).
  2. , , . " ", . , , . , . Flask flask_login, .


, , , — , . , , .

Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/334558/

:  

: [1] []
 

:
: 

: ( )

:

  URL