Aby rozłączyć sesję użytkownika, będziemy potrzebowali jego PID. Wartość tę znajdziemy dzięki słownikowi "pg_stat_activity". Zobaczymy w nim listę wszystkich sesji (w tym wewnętrznych sesji PostgreSQL) wraz z informacją typu ip użytkownika, czy używanego przez niego programu. Na potrzeby przykładu tworzymy użytkownika "problemowy":
create user problemowy;
Następnie podpinamy się jako ten użytkownik z pomocą "psql" i sprawdzamy aktualny czas:
psql -U problemowy -d postgres
select current_timestamp;
Chcemy teraz tę sesję "ubić". Wyszukujemy dane na temat sesji tego użytkownika w "pg_stat_activity":
select * from pg_stat_activity where usename='problemowy';
Potrzebna nam wartość znajduje się w kolumnie "pid". Wartość z tej kolumny przekazujemy jako argument dla funkcji "pg_terminate_backend", by przerwać sesję:
select pg_terminate_backend(917507);
Po przerwaniu sesji wracamy ponownie do połączenia użytkownika "problemowy" i ponownie usiłujemy sprawdzić czas:
Sesję udało się przerwać, choć jak widzimy, psql podłączył się od razu ponownie. Jeśli chcemy, możemy ubić sesję i natychmiast zablokować możliwość ponownego zalogowania się:
select pg_terminate_backend(917592);
alter user problemowy nologin;
Po takiej operacji automatyczna próba ponownego połączenia się nie przechodzi:
Komentarze (0)
Brak komentarzy...